【发布时间】:2013-06-22 16:19:09
【问题描述】:
我有一个 NSOperation 放入队列中。 NSOperation 进行一些长时间运行的照片处理,然后我将信息/元数据保存在该照片的核心数据中。在我的自定义 NSOperation 类的主要方法中,我执行以下代码块
-(void)main
{
//CODE ABOVE HANDLES PHOTO PROCESSING...
//........
//THEN I SAVE ALL DATA BELOW LIKE SO
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
Post *post = [Post createInContext:localContext];
//set about 15 pieces of data, all strings and floats
post.XXXX = XXXXX;
post.DDDD = DDDDD;
etc...
} completion:^(BOOL success, NSError *error) {
NSLog(@"Done saving");
}];
}
我的问题是,即使保存时只有 3 张照片,它也确实冻结了我的 UI。我本来以为在 NSOperation 中执行这个我会没事的。
我应该补充一点,每个 NSOperation 处理一张照片,所以有时队列可能有 5-10 张照片,但我认为这不会有任何区别,即使只有三张就像我说的那样冻结 UI。
感谢您的帮助。
更新:------------*-------------
我切换到了 2.2 版,但这似乎更加阻塞了 UI……我现在也在使用
-(void)main
{
NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];
//CODE BELOW HANDLES PHOTO PROCESSING...
//........
//THEN I SAVE ALL DATA BELOW LIKE SO
Post *post = [Post createInContext:localContext];
//set about 15 pieces of data, all strings and floats
post.XXXX = XXXXX;
post.DDDD = DDDDD;
[localContext saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
}];
}
这都是在我的 NSOperation 类中完成的,我做错了吗?
【问题讨论】:
-
如何开始操作?
-
您是否进行了分析以确定延迟的确切位置?
-
只要处理发生在主线程中,你的用户界面就会冻结。
标签: ios core-data nsoperation magicalrecord