【发布时间】: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' 的类。