我正在尝试通过 URI 从 Core Data 中获取托管对象。为此,我找到了一个方法的 Objective-C 示例 ( http://www.cocoawithlove.com/2008/08/safely-fetching-nsmanagedobject-by-uri.html ) 并将其转换为 Swift ...
func getManagedObjectWithURI(uri:NSURL) -> NSManagedObject?
{
if let psc = persistentStoreCoordinator
{
let objID = psc.managedObjectIDForURIRepresentation(uri);
if (objID != nil)
{
let obj:NSManagedObject = managedObjectContext!.objectWithID(objID!);
if (!obj.fault)
{
return obj;
}
let prd = NSComparisonPredicate(leftExpression: .expressionForEvaluatedObject(), rightExpression: NSExpression(forConstantValue: obj), modifier: .DirectPredicateModifier, type: .EqualToPredicateOperatorType, options: .allZeros);
let req = NSFetchRequest();
req.entity = objID?.entity;
req.predicate = prd;
var results:[NSManagedObject] = managedObjectContext!.executeFetchRequest(req, error: nil) as! [NSManagedObject];
if (!results.isEmpty)
{
return results.first;
}
}
}
return nil;
}
但是该方法总是返回 nil,即 fetch 请求返回空手,我不知道为什么。在 NSFetchRequest 之前,一切看起来都是有效的。有谁知道哪里出了问题?
最佳答案
检查实体和谓词是否包含预期值。
为了清晰起见,另一个建议是使用 NSPredicate(format:)
编写谓词。
request.predicate = NSPredicate(format: "self = %@", object)
为了便于阅读,我更改了您的变量名称。
关于objective-c - Core Data - 通过 URI 获取托管对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028636/