【发布时间】:2014-10-07 19:11:45
【问题描述】:
我有以下课程:
class Profile {
var state:State
var member:Member?
}
class Member: NSManagedObject {
@NSManaged var nickName: String?
@NSManaged var mId: String?
}
问题位于以下类:
class RegisterMultiTableVContr: UITableViewController {
var profile:Profile?
override func viewDidLoad() {
self.profileService.createEmptyProfile(
{ (profile:Profile) in
self.profile = profile
println("\(self.profile!.member!.description)")
/*
Correct:
Output:
<meetpoll.Member: 0x7fd654175c10> (entity: Member; id: 0xd000000000c80000<x-coredata://21228B23-63B3-4708-8EAC-3302072BA074/Member/p5> ; data: {
mId = nil;
nickName = nil;
})
*/
}, failure: { (error:String) in
// Exception Handling
})
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
println("\(self.profile!.member!.description)")
/*
Set to fault automatically
Output:
<meetpoll.Member: 0x7fd654175c10> (entity: Member; id: 0xd000000000c80000<x-coredata://21228B23-63B3-4708-8EAC-3302072BA074/Member/p50> ;
data: <fault>)
*/
}
}
仅在 viewDidLoad 之后调用 prepareForSegue 函数。我将 println 函数的输出写入源代码。 我的问题是,为什么对象成员自动设置为故障?我怎样才能将成员故障再次设置为假?
包括 2014-10-08
该函数创建一个带有 Member 对象的空配置文件,如下所示:
var member = NSEntityDescription.insertNewObjectForEntityForName("Member", inManagedObjectContext: context) as Member
var profile = Profile(member:member)
var error: NSError? = nil
if context.save(&error) {
return profile
}
包括 2014-10-09
好的,我知道您需要更多信息,所以我写了一个迷你简单示例并加载到 GitHub https://github.com/qeychon/CoreDataBug/tree/master
【问题讨论】:
-
这真的是个问题吗?错误只是意味着信息不在内存中,但如果你需要它会被提取......在某些情况下你应该关心它,如果你正在做一堆自定义排序或其他东西......但是通常你应该使用默认的错误行为
-
故障是正常的,应该是可以预料到的。
-
感谢您的回复。问题是,如果我使用 insertNewObjectForEntityForName 创建一个对象并保存,那么我可以在此后不久更改属性。在这个例子中,我看到同一个对象有时被设置为错误。是什么导致了这种变化?
-
保存导致您看到的行为。
-
@quellish 你是对的!