【问题标题】:Array of dict pList returns only indices of Arraydict pList 数组仅返回 Array 的索引
【发布时间】:2014-07-06 21:49:59
【问题描述】:

我有一个看起来像这样的 plist,其中包含 81 个“字典”项:

我有这段代码将 pList 读入 newArray

NSArray *newArray = [[NSArray alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"DukeCruiseControlTable" ofType:@"plist"]];

当我在调试器中查看 newArray 时,我得到:

newArray 具有正确数量的元素,因此它正在读取正确的文件。但不是包含每个元素的内容,而是仅显示元素的索引(例如 [3])。

我做错了什么?

作为 iOS 新手,我想也许调试器只是向我展示了数组的索引,但是当我使用下一个代码将数组读入另一个对象数组时,我收到一个错误,表明 newArray 元素是“[ 3]" 或任何索引。

for (dukeperfPerfChartLine *object in newArray)
{
    [self.perfTable addObject:object];
}

【问题讨论】:

  • 粘贴错误日志。我认为数组没有错误。 objectNSDictionary
  • 要调试,您还可以添加断点并在特定索引处打印数组的描述。
  • dukeperfPerfChartLineNSDictionary 的子类吗?如果是这样,我建议尝试从 plist 中获取实际值,而不仅仅是调试或复制数组。试试int value = [[[newArray objectAtIndex:1] objectForKey:@"expTAS_plus20"] intValue]; NSLog(@"%d",value);
  • @Isaac NSDictionary 极不可能被子类化,这样做需要重写几个方法。
  • @Zaph 我问是因为 OP 提到他在帖子末尾的 for 循环中出现错误。他的数组包含NSDictionary 对象,但他将它们枚举为dukeperfPerfChartLine。我不确定为什么。

标签: ios objective-c arrays dictionary plist


【解决方案1】:

@Rajeev 对答案的评论,但仅作为格式的答案。

另外两种使用不同枚举方式的方法:

使用快速枚举:

for (NSDictionary *dict in newArray) {
    for (NSString *key in dict) {
        NSLog(@"%@=%@",key,[dict objectForKey:key]);
    }
}

使用枚举块:

for (NSDictionary *dict in newArray) {
    [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"%@=%@",key, obj);
    }];
}

这些产生的结果与@Rajeev 的答案相同。

【讨论】:

    【解决方案2】:

    我在读取文件时没有发现任何问题,在调试器中它只会显示索引,您可以尝试在从文件中读取后打印 newArray:

    NSLog(@"%@",newArray);

    为了从 newArray 中读取字典,我认为你应该试试这个:

    已编辑

    for (NSDictionary *dict in newArray)
    {
        NSArray *allKeys = [dict allKeys];
        for (NSString *key in allKeys)
        {
            NSLog(@"%@=%@",key,[dict objectForKey:key]); 
        }
    }
    

    希望它会有所帮助。

    【讨论】:

    • 这回答了主要问题。调试仅显示索引。 for 循环仍然是一个问题——但这可能是因为值是从 plist 作为数字传入的,而 dukeperfPerfChartLine 使用 NSDecimalNumbers。我不知道如何解决它(建议赞赏),但至少现在我专注于正确的问题。谢谢。
    • @SchroedingersCat 我已经修改了我的答案,以便清楚地了解如何从 newArray 访问 NSNumber 元素。
    猜你喜欢
    • 2017-05-29
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2018-09-13
    • 2014-06-27
    • 1970-01-01
    相关资源
    最近更新 更多