[英]Add Object to an NSMutableArray that is an element of an NSDictionary
[英]How to add object of NSDictionary type to an NSMutableArray which contains objects of NSDictionaryResultType?
我正在使用以下代码从Core Data中获取数据-
NSManagedObjectContext *context=[[self appDelegate] managedObjectContext];
NSEntityDescription *entityDesc=[NSEntityDescription entityForName:@"Messages" inManagedObjectContext:context];
NSFetchRequest *request=[[NSFetchRequest alloc] init];
[request setEntity:entityDesc];
[request setResultType:NSDictionaryResultType];
NSArray *objects=[context executeFetchRequest:request error:&error];
包含以上代码的函数向我返回了NSDictionaryType的NSArray。 在视图控制器上,我将它们存储到viewdidload函数中的NSMutableArray *消息中。 现在,如果收到或发送了新消息,我想将新的NSDictionary存储到消息中。 这样做会产生错误:
由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“-[__ NSArrayI addObject:]:无法识别的选择器已发送到实例0x9740230”
代码获取数据
CoreDataHandler *handler=[[CoreDataHandler alloc] init];
NSMutableArray *messages=[[NSMutableArray alloc]initWithObjects: nil];
messages=(NSMutableArray *)[handler fetchMessages:[chatWithUser objectForKey:@"jidStr"]];
我在邮件中添加对象的代码
NSMutableDictionary *m = [[NSMutableDictionary alloc] init];
[m setObject:messageStr forKey:@"msg"];
[m setObject:@"you" forKey:@"sender"];
[m setObject:[NSString getCurrentTime] forKey:@"createdAt"];
[messages addObject:(NSDictionary *) m];
仅仅因为您宣布狗是猫,并不意味着它会突然“变苗”。 它仍然是只狗,只穿着猫的衣服。 现在请注意。 问题是您正在尝试将东西放入不可变的NSArray中。 一旦创建了一个不可变的数组,就无法更改其内容。
你可以试试这个
NSMutableArray *objects=[[context executeFetchRequest:request error:&error] mutable copy];
您应该在NSArray上使用NSMutableArray,NSArray不包含方法addObject。 您可以创建可变副本,例如:
NSMutableArray *objects=[[context executeFetchRequest:request error:&error] mutableCopy;
现在,您可以随意在该对象上调用addObject方法。
您能否提供您在此处引用的其他代码? (例如,您说您将从上述获取中获得的消息存储在NSMutableArray中。在声明为可变数组的地方显示代码,在实例化该代码,并在获取结果中添加代码。) 从错误消息来看,您正在尝试将对象添加到NSArray,而不是添加到NSMutableArray。
您能否提供您在此处引用的其他代码? (例如,您说您将从上述获取中获得的消息存储在NSMutableArray中。在声明为可变数组的地方显示代码,在实例化该代码,并在获取结果中添加代码。) 从错误消息来看,您正在尝试将对象添加到NSArray,而不是添加到NSMutableArray。
好的,因此您正在创建一个NSMutableArray并将其指针存储在“消息”中。 但是,然后您为“消息”分配了一个不同的指针。 您将不可更改的结果集分配给它。 你不应该那样做。 取而代之的是,仅将获取中的对象添加到消息对象中。 像[messages addObjectsFromArray:fetchresults]之类的东西;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.