唯一性约束功能需要 ios 部署目标 9.0 或更高版本 - Core Data

Posted

技术标签:

【中文标题】唯一性约束功能需要 ios 部署目标 9.0 或更高版本 - Core Data【英文标题】:Uniqueness constraint feature requires ios deployment target 9.0 or higher - Core Data 【发布时间】:2015-10-13 10:27:00 【问题描述】:

ios 9 有一个有用的功能,您可以在其中为属性添加唯一约束。 IOS 9 unique constraints

但是我想向上支持 IOS 8,除非我将部署目标设置为 9,否则无法编译。

有没有一种方法可以创建两个数据模型并在编译器指令处使用数据模型 AIOS 8 和数据模型 B IOS 9 及更高版本?

-----更新--------

下面是我手动添加唯一约束的代码

- (NSManagedObjectModel *)managedObjectModel 
    // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
    if (_managedObjectModel != nil) 
        return _managedObjectModel;
    
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CL" withExtension:@"momd"];
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) 
        NSArray *entities = [_managedObjectModel entities];
        NSEntityDescription *entity = [entities firstObject];
        NSArray *properties = @[@"serverFileId"];
        [entity setUniquenessConstraints:@[properties]];
    
    return _managedObjectModel;

【问题讨论】:

你可以创建两个不同的模型并在每个 iOS 中使用它来创建 ManagedObjectContext 吗? 我明白了。在 iOS 8 和 9 上都无法以这种方式打包应用程序 :( 你想在 iOS 8 中检查唯一性,还是什么都不做? @wain 对于 IOS8 和 IOS9 我们需要检查。 【参考方案1】:

一个很有趣的问题,瑞恩。我想到的唯一解决方案是:

您创建了一个兼容 iOS8+iOS9 的模型(没有唯一性 约束)。 您使用 保护您的持久存储协调器创建代码的某些部分

if #available(iOS 9.0, *) // add uniqueness constraints here

您可以像描述的那样以编程方式在受保护范围内添加唯一性约束 here。

更新: 我一直在寻找一种以编程方式将唯一性约束应用于属性的方法,并最终得到了CoreData.NSEntityDescription 的类定义。这是所需的代码:

/* Returns/sets uniqueness constraints for the entity. A uniqueness constraint is a set of one or more attributes whose value must be unique over the set of instances of that entity.
    Returns/sets an array of arrays, each of which contains one or more NSAttributeDescription or NSString instances (strings must be the names of attributes on the entity) on which the constraint is registered. 
    This value forms part of the entity's version hash. Stores which do not support uniqueness constraints should refuse to initialize when given a model containing such constraints.
    Discussion: uniqueness constraint violations can be computationally expensive to handle. It is highly suggested that there be only one uniqueness constraint per entity hierarchy,
    although subentites may extend a sueprentity's constraint.
*/

@available(iOS 9.0, *)
public var uniquenessConstraints: [[AnyObject]]

【讨论】:

我认为这是正确的方法,我正在寻找有关如何添加唯一性约束的代码。 @RyanHeitner,请考虑我的答案的更新 - 可能有你想找到的东西。 哦,你应该把ObjC标签,这样我就知道了。无论如何,很高兴知道它有效。

以上是关于唯一性约束功能需要 ios 部署目标 9.0 或更高版本 - Core Data的主要内容,如果未能解决你的问题,请参考以下文章

XCUIApplication 仅适用于 iOS 9.0 或更新版本,swift3

支持的部署目标版本范围是 9.0 到 14.55 Error While Running Flutter App on iOS Simulator

xcode bug 部署目标

QtCreator:`clang:-stdlib=libc++ 的无效部署目标(需要 OS X 10.7 或更高版本)`

完美解决Android 9.0以上HTTP网络请求被限制问题

向后iOS兼容性 - Swift 2