我有一个多维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