【问题标题】:Cast a NSManagedObject to it's class instance将 NSManagedObject 转换为它的类实例
【发布时间】:2015-07-31 23:48:21
【问题描述】:

我被卡住了,这让我发疯。我有一个返回 NSManagedObject 的函数:

let getaccount = AccountModel.getFirst(globals.managedObjectContext)

我必须将其转换为生成的表示Account

我会这样做的:

dump("--------------------")
dump(getaccount)
dump("--------------------")
if let acc = getaccount as? Account {
    print("OK")
} else {
    print("not convertable ")
}
dump("*********************")

FROM MY UNITTEST 的输出如下所示:

- --------------------
▿ Ticketstream.Account
  ▿ Some: Coredataexampleapp.Account #0
    ▿ super: <Coredataexampleapp.Account: 0x138d85f90> (entity: Account; id: 0x1398a9fe0 <x-coredata://06F96EF3-96A6-4C32-A6A2-F16BCB8318EA/Account/p1> ; data: {
    active = 0;
    avatar =     (
    );
    config =     (
    );
    createdAt = "2015-07-31 23:34:58 +0000";
    displayName = "My Account (1)";
    host = localhost;
    lastUpdatedDate = "2015-07-31 23:34:58 +0000";
    password = nil;
    port = 8080;
    schema = HTTPS;
    username = "";
})
      - NSObject: <Coredataexampleapp.Account: 0x138d85f90> (entity: Account; id: 0x1398a9fe0 <x-coredata://06F96EF3-96A6-4C32-A6A2-F16BCB8318EA/Account/p1> ; data: {
    active = 0;
    avatar =     (
    );
    config =     (
    );
    createdAt = "2015-07-31 23:34:58 +0000";
    displayName = "My Account (1)";
    host = localhost;
    lastUpdatedDate = "2015-07-31 23:34:58 +0000";
    password = nil;
    port = 8080;
    schema = HTTPS;
    username = "";
})
- --------------------
not convertable 
- *********************

如何将 NSManagedObject 投射到 Account 中?

我需要这个,因为我无法获得第一个帐户,除非:

class func getFirst(context: NSManagedObjectContext) -> NSManagedObject? {
    let request = NSFetchRequest(entityName: accountEntityName)
    request.fetchLimit = 1
    let list: NSArray = try! context.executeFetchRequest(request)
    return list.firstObject as? NSManagedObject
}

我已经用 NSManagedObject、AnyObject 和 Account 进行了尝试...如何以正确的方式获得第一个 Account?

更新: 在正常运行模式下:一切正常!我会得到:

- --------------------
OK
- *********************

但不是来自我的测试 :-(

谢谢你的帮助,我迷路了。

【问题讨论】:

  • 托管对象模型是不是属于app目标,而不是test目标的问题?
  • 我检查了几次。可惜没有。
  • @PeterShaw:这个线程stackoverflow.com/questions/25076276/… 有一些与单元测试相关的答案(例如,用@objc(EntityName) 标记托管对象子类。
  • 将@obj(Account) 添加到类Account: NSMangagedObject 后,我​​收到CoreData 警告:无法为实体'Account' 加载名为'Coredataexampleapp .Account' 的类。

标签: swift core-data swift2


【解决方案1】:

依次选择所有项目文件并查看右侧的文件检查器。确保所有文件都在其目标成员资格中选中了“测试”项目。

【讨论】:

  • 所有文件都属于主目标和测试目标!甚至所有实体也属于测试目标
  • 嗯!我很好奇是否可以在两种情况下的断点处从 lldb 收集到任何差异。也许在您的问题中包括getobject 上的po
【解决方案2】:

不需要在测试目标中包含所有正常的类文件。您只需要导入主模块,一切都会按预期进行。

@testable import AppName

这是在 Xcode 7 beta 4 中自动插入的。有关转换问题,请参阅 this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    相关资源
    最近更新 更多