目标C语言 不能添加NSArray到NSDictionary



我有一个多维NSDictionary,并且在向它添加数组时遇到问题。我的字典结构是这样的:(通过nsloging字典获取)

{
    Downloaded =     {
        017315 = "2013-01-16 11:26:33 +0000";
    };
    Projects =  (
        {
            Docs = { };
            "Last Downloaded" = "2013-01-16 10:16:05 +0000";
            "Project Name" = "Baring Australia Fund";
        }
    );
}

我正在尝试添加一个新的数组到"文档"字典。我使用的代码是

[[[[myDict objectForKey:@"Projects"] objectAtIndex:0] objectForKey:@"Docs"] setObject:[NSMutableArray array] forKey:@"test"];

失败,出现以下错误

由于未捕获异常'NSInvalidArgumentException'而终止应用程序,原因:'-[__NSArrayM objectForKey:]:无法识别的选择器发送到实例0x7592df0'

如果我尝试使用下面的代码向Docs键添加Dictionary而不是数组,它会工作。

[[[[myDict objectForKey:@"Projects"] objectAtIndex:0] objectForKey:@"Docs"] setObject:[NSMutableDictionary dictionary] forKey:@"test"];

此外,我还可以将新数组添加到第一个"Projects"数组项中,而不是添加到其中的Docs对象中。

我做错了什么,为什么这不起作用?

谢谢

[[[myDict objectForKey:@"Projects"] objectAtIndex:0] objectForKey:@"Docs"]返回一个数组。

你在这个数组中使用了setObject:forKey:

[someArray setObject: forKey:]是你的编译器看到的并抛出错误。

编辑:

我检查了你的代码,没有问题。上面的错误是来自其他地方的

我模仿了你的代码,它工作得很好。看一下,我测试了什么:
 NSMutableDictionary *myDict=[NSMutableDictionary new];
NSMutableDictionary *downloadedDict=[NSMutableDictionary dictionaryWithObject:@"2013-01-16 11:26:33 +0000" forKey:@"017315"];
[myDict setObject:downloadedDict forKey:@"Downloaded"];
NSMutableDictionary *docsDict=[NSMutableDictionary new];
NSMutableDictionary *emptyDict=[NSMutableDictionary new];
[docsDict setObject:emptyDict forKey:@"Docs"];
[docsDict setObject:@"2013-01-16 10:16:05 +0000" forKey:@"Last Downloaded"];
[docsDict setObject:@"Baring Australia Fund" forKey:@"Project Name"];
NSMutableArray *projects=[NSMutableArray new];
[projects addObject:docsDict];

[myDict setObject:projects forKey:@"Projects"];
// NSLog(@"%@",mainDict);
//[[[[myDict objectForKey:@"Projects"] objectAtIndex:0] objectForKey:@"Docs"] setObject:[NSMutableDictionary dictionary] forKey:@"test"];
[[[[myDict objectForKey:@"Projects"] objectAtIndex:0] objectForKey:@"Docs"] setObject:[NSMutableArray array] forKey:@"test"];
NSLog(@"%@",myDict);

考虑到您存储的数据的复杂性(以及您和我显然无法处理这种复杂性),我认为您最好的方法是将其重新实现为自定义对象,其中对象属性以更具体的方式实现。

它很可能很快就会为所需的努力付出代价。

UPDATE一些示例对象(我没有完整的要求,所以这将是不完整的):

@interface Project : NSObject
{
    NSString *_name;
    NSMutableArray *_documents;   // Array of document names?
    NSDate *_lastDownloaded;
}
// @property for each ivar
@end
@interface Projects : NSObject
{
    NSDate *_lastDownloaded;
    NSMutableArray *_projects;     // Array of Project objects
}
// @property for each ivar
@end

相关内容

  • 没有找到相关文章

最新更新