1

我在代码中的这一行收到 sigbart 错误:

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"ViewTwo"];

这是方法:

- (NSFetchedResultsController *)fetchedResultsController
{
if (__fetchedResultsController != nil) {
    return __fetchedResultsController;
}

// Set up the fetched results controller.
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyData" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];

// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"ViewTwo"];

aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;

NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
    /*
     Replace this implementation with code to handle the error appropriately.

     abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
     */
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

return __fetchedResultsController;
}

但这是一个奇怪的错误,因为在控制台中没有给我任何解释,所以我无法理解我做错了什么。

4

3 回答 3

5

NSFetchedResultsController 需要一个排序描述符和一个托管对象上下文。您没有提供排序描述符,因此您必须提供它。

于 2012-07-03T00:08:25.500 回答
0

奇怪的是 SIGBART 没有输出,尝试运行指令(点击单步查看它是否输出。

您需要做的是检查您发送给方法的每个元素(通过记录),其中一个元素可能实际上是 nil 或在调用执行之前被取消引用。

于 2012-07-03T00:06:35.313 回答
0

您可以修改您的 xcdatamodled 但没有在设备上重新安装您的应用程序。

只需删除在您的设备上构建的应用程序并重新构建它,一切都会好起来的。

苹果是这样说的:

abort() 使应用程序生成崩溃日志并终止。您不应该在运输应用程序中使用此功能,尽管它在开发过程中可能很有用。

这里出现错误的典型原因包括: * 持久存储不可访问;* 持久存储的模式与当前的托管对象模型不兼容。检查错误消息以确定实际问题是什么。

如果无法访问持久存储,则文件路径通常有问题。通常,文件 URL 指向应用程序的资源目录,而不是可写目录。

如果您在开发过程中遇到架构不兼容错误,您可以通过以下方式降低其频率: * 只需删除现有商店:

 [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]
  • 通过将以下字典作为选项参数传递来执行自动轻量级迁移:

     [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    

    轻量级迁移仅适用于有限的架构更改;有关详细信息,请参阅“核心数据模型版本控制和数据迁移编程指南”。

于 2012-07-03T02:52:09.440 回答