代码之家  ›  专栏  ›  技术社区  ›  Martin Gordon

核心数据:在实体中找不到keypath“objectid”

  •  12
  • Martin Gordon  · 技术社区  · 15 年前

    我在用 NSFetchedResultsController 用谓词加载 Documents 在我的申请中。我想把所有的 文件 除了当前活动的。

    我用的是Rentzsch's MOGenerator 创建一个 _Document 类,然后我将所有自定义代码放入 Document 子类。 公文 生成 objectID 类型为的属性 DocumentID .

    在创建控制器的类中,我设置控制器的 currentDocID 财产:

    controller.currentDocID = self.document.objectID;
    

    在控制器本身中,我懒惰地加载getedResultsController,如下所示:

    - (NSFetchedResultsController *)fetchedResultsController {
        if (fetchedResultsController != nil) {
            return fetchedResultsController;
        }
    
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];
        [fetchRequest setEntity:entity];
    
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID != %@)", self.currentDocID];
        [fetchRequest setPredicate:predicate];
    
        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateModified" ascending:NO];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    
        [fetchRequest setSortDescriptors:sortDescriptors];
    
        NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
        aFetchedResultsController.delegate = self;
        self.fetchedResultsController = aFetchedResultsController;
    
        [aFetchedResultsController release];
        [sortDescriptor release];
        [sortDescriptors release];
    
        return fetchedResultsController;
    }
    

    加载FetchedResultsController时,我的应用程序崩溃,出现未处理的异常:

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath objectID not found in entity <NSSQLEntity Document id=1>'
    

    据我所知,所有NSManagedObject都有一个对象,无论是临时的还是永久的。不是这样吗?有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  10
  •   Marcus S. Zarra    15 年前

    将谓词改为read

    [NSPredicate predicateWithFormat:@"self != %@", [self currentDoc]]
    

    在哪里? currentDoc 是对的实例的引用 NSManagedObject 表示当前文档的。

    核心数据将在内部进行相等性检查。