1

我有一个 NSDictionary 包含多个具有相同名称的键。这是结构:

Dictionary {

    "Text" => "Blah",
    "Text" => "Blah 2",
    "Text" => "Blah 3"

}

所以有三个同名的键Text。我将 的值Text放入NSMutableArrayusing 中:

NSDictionary *notes = [d objectForKey:@"notes"]; //dictionary above
NSMutableArray *notesA = [notes valueForKey:@"Text"];
NSLog(@"%i", notesA.count);

但是,当我尝试获取数组中的项目数时,它会崩溃并出现以下错误:

-[__NSCFString count]: unrecognized selector sent to instance 0x856c110

知道为什么会这样吗?我能够输出NSMutableArray并查看它们的值,但无法计算它们。


这是 XML 文件:

<tickets>
 <text>Blah</text>
 <text>Blah 2</text>
 <text>Blah 3</text>
</tickets>

笔记字典输出:

(
        {
        text = "Blah";
    },
        {
        text = "Blah 1";
    },
        {
        text = "Blah 2";
    }
)
4

1 回答 1

4

您将 NSStrings 添加为对象,而不是 NSArray。

NSDictionary *notes = [NSDictionray dictionaryWithObjectsAndKeys:[NSMutableArray arrayWithObjetcs:@"Blah",@"Blah 2", @"Blah3"],@"Text",nil];

NSMutableArray *notesA = [notes objectForKey:@"Text"];
NSLog(@"%i", [notesA count]);

当我们使用 NSMutableArray 时,这也是有效的:

NSDictionary *notes = [NSDictionray dictionaryWithObjectsAndKeys:[NSMutableArray array],@"Text",nil];

NSMutableArray *notesA = [notes objectForKey:@"Text"];
[notesA addObject:@"Blah"];
[notesA addObject:@"Blah 2"];
[notesA addObject:@"Blah 3"];
NSLog(@"%i", [notesA count]);

顺便提一句:

Dictionary {

    "Text" => "Blah",
    "Text" => "Blah 2",
    "Text" => "Blah 3"

}

这不是一个有效的 NSDictionary 结构,因为键必须是唯一的。

你想要的是:

Dictionary {
    "Text" => ["Blah", "Blah 2","Blah 3"]    
}

如果您为同一个键设置了多个对象,则较旧的对象将被较新的对象替换。


当解析器解析门票标签时,它应该创建一个数组,用于添加单个文本。


(
        {
        text = "Blah";
    },
        {
        text = "Blah 1";
    },
        {
        text = "Blah 2";
    }
)

您的笔记对象不是字典。它是一个包含 3 个字典的数组。每个都有一个关键文本和一些 blah 值。

于 2012-07-28T22:38:27.930 回答