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

标签 objective-c cocoa swift cocoa-touch core-data

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

相关文章:

c++ - 如何在 Objective-C 中包装一个巨大的静态 C++ 库?

objective-c - 如何在 Objective-C 应用程序中观察 NSUserDefaults 的命令行更改?

objective-c - NSGraphicsContext 透视图

Swift NSPopUpButton 枚举

ios - Swift iOS 以编程方式在导航栏下方设置 scrollView 约束

objective-c - 有助于可视化 iOS 应用程序工作流、算法、调用方法等的东西

iphone - Objective-C 和 Ruby 中的数据编码

XML 解析器读取 channel 描述标签

iphone - 如何确定 Core Data 中实体的属性数据类型?

swift - NSUserNotification 的属性 additionalActions 似乎不起作用?