简单的问题。谁能告诉我这段代码有什么问题?
+ (NSManagedObject*) managedObjectWithServerId:(NSInteger)serverId inManagedObjectContext:(NSManagedObjectContext*)context{
//Execute request and get all the results
NSError * error = nil;
NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass(self)];
request.predicate = [NSPredicate predicateWithFormat:@"serverId == %@" argumentArray:[NSArray arrayWithObject:[NSNumber numberWithInteger:serverId]]];
NSArray * results = [context executeFetchRequest:request error:&error];
}
结果数组始终是一个带有0个对象的NSArray,没有给出任何错误。只是一个0计数的数组。
并且不可能总是返回0个元素,我正在使用SQLite资源管理器探索核心数据数据库,并且我正在请求serverId
的元素,因此应该至少有1个。
我做错了吗?
上述代码在NSManagedObject
类别中实现,并按如下所示进行调用:
[User managedObjectWithServerId:whatev inManagedObjectContext:context];
User
是我的模型中的实体和NSManagedObject
的子类。
答案 0 :(得分:0)
问题已解决,似乎我总是因为意外情况而重新创建数据库文件。我注意到因为所有主键总是从1开始。
如果在创建新UIManagedDocument数据库文件之前未删除先前的UIManagedDocument数据库文件,则CoreData似乎存在一些问题。
在条件修复的情况下,我没有得到NSPersistentStoreCoordinator崩溃错误,我可以看到所有带调试的SQL方法,我的提取当然可以正常工作。
感谢所有尝试过帮助的人,并且抱歉浪费你的时间:)