iOS:NSManagedObjectContext / NSFetchRequest / NSEntityDescription 有问题
iOS: Problem with the NSManagedObjectContext / NSFetchRequest / NSEntityDescription
我有一条错误消息 ' 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:' -[__NSArrayM insertObject:atIndex:]: 对象不能为 nil'
问题出在 fetchedObjects。
这是因为它试图向 NSArray 添加一个 nil 值。我不明白的是为什么会有那个空值。
有关信息:table 是我的 sqlite table 的名称,标签只是我的 table.
的一个字段
- (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;
}
初始化好:
错误的初始化:
你有什么想法吗?
提前致谢。
这是一个常见的错误。我想你应该看看你的台词:
id info = [[theClass alloc] initWithEntity:entity insertIntoManagedObjectContext:managedObjectContext];
如果您想了解更多信息,请看这里:Use NSManagedObject class without initWithEntity:?
你应该insertIntoManagedObjectContect:nil
我有一条错误消息 ' 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:' -[__NSArrayM insertObject:atIndex:]: 对象不能为 nil'
问题出在 fetchedObjects。
这是因为它试图向 NSArray 添加一个 nil 值。我不明白的是为什么会有那个空值。
有关信息:table 是我的 sqlite table 的名称,标签只是我的 table.
的一个字段- (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;
}
初始化好:
错误的初始化:
你有什么想法吗? 提前致谢。
这是一个常见的错误。我想你应该看看你的台词:
id info = [[theClass alloc] initWithEntity:entity insertIntoManagedObjectContext:managedObjectContext];
如果您想了解更多信息,请看这里:Use NSManagedObject class without initWithEntity:?
你应该insertIntoManagedObjectContect:nil