“lock”已被弃用:自iOS 8.0起开始弃用 - 使用-performBlockAndWait:代替- iOS CoreData警告

3

我正在使用Xcode 7.1,打开我的现有应用程序时出现此警告。如果有人能展示如何使用-performBlockAndWait:将会很有帮助。

enter image description here

谢谢


不应该发布这种截图。请以文本形式发布代码,并将其格式化为代码。 - Mundi
谢谢。我添加了此屏幕截图,因为我想展示警告消息。从现在开始,我将发布代码。 - Confused
你接受了之前我发布的完全相同的答案,但你至少可以给我的答案点个赞。 - Mundi
2个回答

6

正如Mundi所说,你不需要为你正在做的事情加锁。但是,针对你关于lockunlock被弃用的一般问题,你应该使用performBlockperformBlockAndWait。这些方法类似于NSManagedObjectContext上的方法。

因此,你不再需要手动锁定关键区域,而是将该代码放入将要“执行”的块中。

例如,如果你有以下代码...

[persistentStoreCoordinator lock];
[persistentStoreCoordinator doSomeStuff];
[persistentStoreCoordinator unlock];

你需要将其替换为...
[persistentStoreCoordinator performBlock:^{
    [persistentStoreCoordinator doSomeStuff];
}];

请注意,performBlock 是一个异步操作,它会立即返回,并将代码块安排在将来的某个时间点在其他线程上执行。这应该没问题,因为我们应该使用大部分异步模型进行编程。
如果必须使用同步执行,您可以使用另一种方式,在返回到调用线程之前完成块的执行。
[persistentStoreCoordinator performBlockAndWait:^{    [persistentStoreCoordinator doSomeStuff];
}];

同样的,它们的行为与NSManagedObjectContext的对应项完全相同。


0

只需删除有问题的代码行即可。在向协调器添加持久化存储时不需要任何锁。

此外,您应该使用最新的Xcode,目前是7.2。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接