gpt4 book ai didi

ios - Magical Record 后台保存似乎阻塞了 UI

转载 作者:可可西里 更新时间:2023-11-01 04:22:36 26 4
gpt4 key购买 nike

我有一个放在队列中的 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 类中完成的,我做错了什么吗?

最佳答案

不要将 saveWithBlock 调用放在后台线程中。您实际上是在从后台线程创建后台线程,在这种情况下,这只会减慢您的速度。你应该只能调用 saveWithBlock 并且它应该将你所有的保存代码放在后台。但是,我还注意到您在代码的主 UI 页面中进行了所有更改,然后才调用保存。这是这种方法的错误用法。你想做更像这样的事情:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
Post *post = [Post createInContext:localContext];

//photo processing
//update post from photo processing
} completion:^(BOOL success, NSError *error) {
//This is called when data is in the store, and is called on the main thread
}];

如果您确实需要 NSOperation,我建议使用不同的模式:

- (void) main {
NSManagedObjectContext *localContext = [NSManagedObjectContext confinementContext];
// Do your photo stuff here

Post *post = [Post createInContext:localContext];
//more stuff to update post object

[localContext saveToPersistentStoreAndWait];

}

关于ios - Magical Record 后台保存似乎阻塞了 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17304616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com