从 NSDictionary 到 NSString 的所有键和对象

Posted

技术标签:

【中文标题】从 NSDictionary 到 NSString 的所有键和对象【英文标题】:all Keys and Objects from a NSDictionary to a NSString 【发布时间】:2012-06-19 21:49:33 【问题描述】:

我有一个 NSDictionary,我想把它的所有对象和键放入一个 NSString,这样我最终可以将它们显示在这样的标签中:

key1: 对象1

key2: 对象2

key3: 对象3

... ...

有什么想法吗?

【问题讨论】:

【参考方案1】:

构建字符串,然后将其设置为标签文本。

NSMutableString *myString = [[NSMutableString alloc] init];

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) 
    [myString appendFormat:@"%@ : %@\n", key, obj];
];

self.label.text = myString;

注意

%@ 格式说明符状态的文档 (String Programming Guide):

%@ Objective-C 对象,打印为 descriptionWithLocale 返回的字符串:如果可用,否则为描述。也适用于 CFTypeRef 对象,返回 CFCopyDescription 函数的结果。

因此,如果这些是您自己在字典中的自定义对象,您很可能需要覆盖 description 方法以提供更有意义的输出

更新

您提到您需要按键对输出进行排序 - 字典没有排序,因此您必须以不同的方式进行 - 此示例假定您的键是字符串

NSArray *sortedKeys = [[dictionary allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

NSMutableString *myString = [[NSMutableString alloc] init];

for (NSString *key in sortedKeys) 
    [myString appendFormat:@"%@ : %@\n", key, [dictionary objectForKey:key]];


self.label.text = myString;

【讨论】:

看来你应该将 \n 添加到格式的末尾,因为在他的示例中,每行都有键值对 对于我这个初学者来说,这看起来很花哨,但它已经满足了我的需要。 太棒了。 \n 成功了:) ...但是这个函数如何对键进行排序?在我的情况下,我将日期作为字符串,我希望它们从过去到最近。 三个字:你太棒了。非常感谢!【参考方案2】:

试试这个

for(id key in [dictionary allKeys])

    id value = [dictionary objectForKey:key];
    NSLog(@"%@ : %@", key, value);

【讨论】:

由于使用的是%@,所以不需要手动调用description方法。编辑:赞成快速修复:) 当您对字典使用快速枚举时,您迭代的对象是字典的键。因此,您不需要在 for 循环中调用 -allKeys。只要说:for (id key in dictionary) .... 你们的速度真棒!呃,但是我怎样才能在你的代码中显示什么是 NSLog 作为我可以放入标签中的 Sting? (如:[label setText: stringX]; ...我的意思是只创建一个标签,然后包含字典中的所有条目。【参考方案3】:
NSString *row;
for (id key in dictionary) 
    row = [NSString stringWithFormat:"%@: %@", key, [dictionary objectForKey:key]];
    // do something with your row string

【讨论】:

【参考方案4】:

我试图从我的 TCTime 对象中附加两个时间值并显示在标签中,即使我在最后添加了“\n”,它也只打印第一个值而不是第二个值。

_feedTimes 是 NSArray。

NSMutableString *myString = [[NSMutableString alloc] init];

TCTime *time = _feedTimes[indexPath.row];

[myString appendFormat:@"%s : %@\n", "Time 1 ", time.Time1];

[myString appendFormat:@"%s : %@\n", "Time 2 ", time.Time2];

self.label.text = myString;

【讨论】:

以上是关于从 NSDictionary 到 NSString 的所有键和对象的主要内容,如果未能解决你的问题,请参考以下文章

从 NSDictionary 解析 NSString 值返回 nil

如何将 NSString 从 JSON 转换为 NSDictionary? [关闭]

如果将一个NSObject从NSDictionary转换为NSString?

如何从 NSDictionary 中获取键和值?

将 NSDictionary 转换为 NSString

具有 NSNumber 到 NSString 映射的 NSDictionary 是非属性列表对象