【问题标题】:Crash when counting NSMutableArray计数 NSMutableArray 时崩溃
【发布时间】:2012-07-28 22:37:00
【问题描述】:

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

Dictionary {

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

}

所以有三个同名的键Text。我将Text 的值放入NSMutableArray 使用:

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";
    }
)

【问题讨论】:

    标签: objective-c ios cocoa-touch


    【解决方案1】:

    您将 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 个字典的数组。每个都有一个关键文本和一些废话值。

    【讨论】:

    • 你建议我做什么来解决它?
    • 首先您应该告诉我们,您是如何创建字典的,如您所见,我正在寻找答案。
    • 谢谢,但我正在从我正在解析的 XML 文件中获取 NSDictionary。 XML 文件有多个同名标签(我将在我的问题中添加一个示例)。当我使用objectForKey 时,它崩溃了。
    • 我在问题中添加了notes 字典。一切都在那里,正如我所说,我可以使用我以前拥有的东西将所有对象放入数组中,但它不会计算在内。
    • 查看我的编辑。您必须在解析器中处理,票证可以有 n 个文本标签。
    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多