'lock' 已弃用:首先在 iOS 8.0 中弃用 - 使用 -performBlockAndWait: 代替 - iOS 核心数据警告

'lock' is deprecated: first deprecated in iOS 8.0 - Use -performBlockAndWait: instead - iOS coredata warning

我正在使用 Xcode 7.1,但在打开我现有的应用程序时收到此警告。如果有人展示使用 -performBlockAndWait:

的方法会很有帮助

谢谢

只需删除违规行即可。向协调器添加持久存储时不需要任何锁。

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

正如 Mundi 所说,您不需要锁定您正在做的事情。但是,要解决您关于 lockunlock 被弃用的一般问题...

您应该改用 performBlockperformBlockAndWait。这些方法与 NSManagedObjectContext.

上的方法类似

所以,不是手动锁定关键区域,而是将该代码放入一个块中,该块获得 "performed."

例如,如果您有此代码...

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

您可以将其替换为...

[persistentStoreCoordinator performBlock:^{
    [persistentStoreCoordinator doSomeStuff];
}];

请注意,performBlock 是一个异步操作,它会立即 return,安排代码块在将来某个时间点在其他线程上执行。

这应该没问题,因为无论如何我们应该使用异步模型进行大部分编程。

如果您必须同步执行,您可以使用替代方法,它将在 return 调用线程之前完成块的执行。

[persistentStoreCoordinator performBlockAndWait:^{
    [persistentStoreCoordinator doSomeStuff];
}];

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