【发布时间】:2018-09-17 14:37:07
【问题描述】:
我有一条错误消息 ' 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:' -[__NSArrayM insertObject:atIndex:]: object cannot是零'
问题出在 fetchedObjects 上。
这是因为它试图将 nil 值添加到 NSArray。我不明白的是,为什么会有那个空值。
供参考:表是我的sqlite表的名称,标签只是我表的一个字段。
- (NSMutableArray*) getLabel:(NSString *)label fromTable:(NSString *)table
{
NSMutableArray * ret = [NSMutableArray new];
NSError *error = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:table
inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
Class theClass = NSClassFromString(table);
id info = [[theClass alloc] initWithEntity:entity insertIntoManagedObjectContext:managedObjectContext];
for (info in fetchedObjects)
{
[ret addObject:[info valueForKey: label]];
}
return ret;
}
你有什么想法吗? 提前致谢。
【问题讨论】:
-
没什么奇怪的,刚才分配的对象有空字段。
-
在将对象添加到数组或字典之前,您应该始终检查它是否为 nil。那里没有足够的信息来理解为什么 [info valueForKey: label] 为 nil。我们需要查看创建托管对象并将其存储在数据库中的代码。我们还需要知道 'label' 的值。
-
@Cy-4AH 我没听懂,什么意思?
-
@Dimitar08 我知道我必须检查nil,但我的问题不是要避免nil,而是要解释它。我不想把灰尘藏在地毯下……如果有帮助的话,我会把更多的信息放在票里。
-
仔细查看代码后,Cy-4AH 是正确的。您的代码正在创建一个新的托管对象。有意义的是,此时对象上的任何字段都不会填充数据。
标签: ios objective-c nsmanagedobject nsmanagedobjectcontext nsfetchrequest