swift中自定义NSManagedObject类核心数据的问题

Posted

技术标签:

【中文标题】swift中自定义NSManagedObject类核心数据的问题【英文标题】:Issue with custom NSManagedObject class core data in swift 【发布时间】:2014-06-23 10:33:24 【问题描述】:

我最近开始学习 swift,我想使用一些用 Objective C 编写的数据模型类。当我尝试从输入框中保存数据时遇到一个奇怪的错误:

用户.h

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>


@interface Users : NSManagedObject

@property (nonatomic, retain) NSString * password;
@property (nonatomic, retain) NSString * username;

- (NSString *)toString;
- (void)addFunny:(NSString *)prefix;

@end

用户.m

#import "Users.h"


@implementation Users

@dynamic password;
@dynamic username;

- (NSString *)toString

    return @"The username is \(username) and password is \(password)";


- (void)addFunny:(NSString *)prefix

    self.username = [NSString stringWithFormat:@"%@%@", prefix, self.username];


@end

这是数据模型截图:

这是保存功能:

@IBAction func btnSave_Clicked()
        println("Save \(txtUsername.text)")

        let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        let context: NSManagedObjectContext = appDel.managedObjectContext
        let ent = NSEntityDescription.entityForName("Users", inManagedObjectContext: context)

        var newUser = Users(entity: ent, insertIntoManagedObjectContext: context)
        newUser.username = txtUsername.text
        newUser.password = txtPassword.text

        context.save(nil)
        println(newUser)

    

来自 lldb 的代码:

Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0xb736c50 metadata=
    NSPersistenceFrameworkVersion = 508;
    NSStoreModelVersionHashes =     
        Entity = <b2bc8535 3bcfcdf1 81eecadc d32d8511 cc030525 d4eb7d76 94d11d7c f5853918>;
    ;
    NSStoreModelVersionHashesVersion = 3;
    NSStoreModelVersionIdentifiers =     (
        ""
    );
    NSStoreType = SQLite;
    NSStoreUUID = "0169C569-2A57-47F1-9EF6-684485CB1135";
    "_NSAutoVacuumLevel" = 2;
, reason=The model used to open the store is incompatible with the one used to create the store, (error.userInfo)

【问题讨论】:

首次在设备上安装应用后,您是否更新了 coredata 模型?如果是(并且没有合并规则)删除应用程序并重新安装以确保更新模型没有冲突 【参考方案1】:

这与 swift 无关。如果您更新您的 coredata 模型没有像Applee Doc 中提到的那样定义合并/版本控制规则,您需要删除重新安装 设备或模拟器上的应用程序。

查看错误信息:

The model used to open the store is incompatible with the one used to create the store

从模拟器/或设备中删除应用程序并对您的项目执行清理。那应该可以解决这些问题。删除应用程序时,请确保您没有在调试器中运行,否则它实际上不会正确删除它。

如果您想确定它已经消失(模拟器),请检查此目录

Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/ for your app's folder, under the version you're running.

您不能指望更改已安装的模型会在设备上不费吹灰之力。

【讨论】:

谢谢,当我切换到另一个模拟器时它确实有帮助!

以上是关于swift中自定义NSManagedObject类核心数据的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 swift 在 xcode 6 中自定义 NSValueTransformer

Swift 中的 NSManagedObject 子类不能使用自定义访问器?

Swift:CoreData NSManagedObject 的自定义设置器

为啥我的 Swift 类的扩展在定义文件之外不可见?

如何在 Core Data 中自定义保存?

UITableViewRowAction 在 Swift 中自定义标题字体大小