gpt4 book ai didi

objective-c - Core Data - 通过 URI 获取托管对象

转载 作者:行者123 更新时间:2023-11-28 07:07:14 25 4
gpt4 key购买 nike

我正在尝试通过 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com