更新数据时 MagicalRecord saveWithBlockAndWait 不起作用
Posted
技术标签:
【中文标题】更新数据时 MagicalRecord saveWithBlockAndWait 不起作用【英文标题】:MagicalRecord saveWithBlockAndWait doesn't work when updating data 【发布时间】:2014-09-18 20:58:23 【问题描述】:我使用 MagicalRecord v2.3.0 beta 3。我看到 MR_contextForCurrentThread 已被弃用,建议使用 saveWithBlockAndWait。所以我写了我的代码来更新这样的一个项目:
[MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext)
Item *item = [Item MR_createEntityInContext:localContext];
item.text = newText;
];
但这不起作用。但是,saveWithBlockAndWait 可以很好地用于插入和删除。
然后我必须使用 MR_contextForCurrentThread 来进行更新。
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
Item *item = [Item MR_findFirstByAttribute:@"id" withValue:itemId];
item.text = newText;
[localContext MR_saveToPersistentStoreAndWait];
有什么问题?
【问题讨论】:
您保存/更新了多少对象?多频繁?您是否发现在主线程上运行更新时出现任何问题(保持简单并在您有实际理由时进行重构)。 我在单元测试中测试只更新一个对象,但并不频繁,因为我手动测试它。我还没有在我的主线程中测试它。 您编写第一个示例的方式应该可行。当你说它不起作用时,你期望发生什么,实际发生了什么? 第一种方式,调用saveWithBlockAndWait后,item的文本不会改变。这就是我问它的原因。 【参考方案1】:您写道,您想要更新,但您的代码将在当前上下文中创建一个新实体。
也许正确的代码是:
[MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext)
Item *item = [Item MR_findFirstByAttribute:@"id" withValue:itemId inContext:localContext];
item.text = newText;
];
此代码应更新 itemID 指定的实体。
祝你好运!
【讨论】:
以上是关于更新数据时 MagicalRecord saveWithBlockAndWait 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
MagicalRecord UIApplicationDidEnterBackground
使用 MagicalRecord 更新 CoreData 记录会创建一个额外的空记录