【发布时间】:2011-01-02 18:16:39
【问题描述】:
我在处理核心数据/NSFetchedResultsController 时遇到了一些问题。我不完全确定错误在哪里,因为消息很模糊。
当获取的结果控制器没有获取任何对象时,我遇到了插入多个对象的问题。如果我尝试插入多个未获取的对象,则以下代码将崩溃并出现以下错误。如果我用它来插入一个对象,它不会崩溃,如果已经提取了对象,它也不会崩溃。
崩溃发生在 save: 方法上。 NSArray 中的标题,在本例中它包含 5 个字符串。
严重的应用程序错误。例外 在核心数据更改期间被捕获 处理:* -[NSCFArray objectAtIndex:]: 超出索引 (4) 使用 userInfo (null) 限制 (1) * 由于未捕获的异常“NSRangeException”而终止应用程序,原因: '*** -[NSCFArray objectAtIndex:]: 索引 (4) 越界 (1)'
NSEnumerator *titleEnumerator = [titles objectEnumerator];
NSString *title;
NSMutableArray *tasks = [NSMutableArray array];
Todo *todo;
while(title = [titleEnumerator nextObject])
{
todo = (Todo *)[NSEntityDescription insertNewObjectForEntityForName:@"Todo" inManagedObjectContext:managedObjectContext];
todo.title = title;
todo.state = [NSNumber numberWithInteger:TodoStateIncomplete];
todo.priority = [NSNumber numberWithInteger:TodoPriorityNormal];
todo.timeStamp = [NSDate date];
todo.dueDate = [NSDate distantFuture];
}
NSError *error;
if(![managedObjectContext save:&error])
{
NSLog(@"Unresolved error %@ %@", error, [error userInfo]);
abort();
}
【问题讨论】:
-
我已经设法通过一些狡猾的破解来绕过崩溃。在循环中,我检查它是否是第一次。如果是我保存。这就像我一开始只是添加一个对象,以防止在我添加许多对象时它崩溃。这会让我度过难关,但我仍然想知道为什么会发生这种情况,以便我可以正确修复它。
标签: iphone cocoa-touch core-data uikit