'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 所说,您不需要锁定您正在做的事情。但是,要解决您关于 lock
和 unlock
被弃用的一般问题...
您应该改用 performBlock
或 performBlockAndWait
。这些方法与 NSManagedObjectContext
.
上的方法类似
所以,不是手动锁定关键区域,而是将该代码放入一个块中,该块获得 "performed."
例如,如果您有此代码...
[persistentStoreCoordinator lock];
[persistentStoreCoordinator doSomeStuff];
[persistentStoreCoordinator unlock];
您可以将其替换为...
[persistentStoreCoordinator performBlock:^{
[persistentStoreCoordinator doSomeStuff];
}];
请注意,performBlock
是一个异步操作,它会立即 return,安排代码块在将来某个时间点在其他线程上执行。
这应该没问题,因为无论如何我们应该使用异步模型进行大部分编程。
如果您必须同步执行,您可以使用替代方法,它将在 return 调用线程之前完成块的执行。
[persistentStoreCoordinator performBlockAndWait:^{
[persistentStoreCoordinator doSomeStuff];
}];
同样,它们的行为与它们的 NSManagedObjectContext
对应物完全相同。
我正在使用 Xcode 7.1,但在打开我现有的应用程序时收到此警告。如果有人展示使用 -performBlockAndWait:
谢谢
只需删除违规行即可。向协调器添加持久存储时不需要任何锁。
此外,您应该使用最新的 Xcode,目前是 7.2。
正如 Mundi 所说,您不需要锁定您正在做的事情。但是,要解决您关于 lock
和 unlock
被弃用的一般问题...
您应该改用 performBlock
或 performBlockAndWait
。这些方法与 NSManagedObjectContext
.
所以,不是手动锁定关键区域,而是将该代码放入一个块中,该块获得 "performed."
例如,如果您有此代码...
[persistentStoreCoordinator lock];
[persistentStoreCoordinator doSomeStuff];
[persistentStoreCoordinator unlock];
您可以将其替换为...
[persistentStoreCoordinator performBlock:^{
[persistentStoreCoordinator doSomeStuff];
}];
请注意,performBlock
是一个异步操作,它会立即 return,安排代码块在将来某个时间点在其他线程上执行。
这应该没问题,因为无论如何我们应该使用异步模型进行大部分编程。
如果您必须同步执行,您可以使用替代方法,它将在 return 调用线程之前完成块的执行。
[persistentStoreCoordinator performBlockAndWait:^{
[persistentStoreCoordinator doSomeStuff];
}];
同样,它们的行为与它们的 NSManagedObjectContext
对应物完全相同。