在coredata保存数据的问题?

时间:2011-09-27 04:39:23

标签: objective-c xcode core-data

在我的应用程序中有searchBar。当我们输入文本时,它会执行functionGrab(从互联网获取数据并将其保存到coredata),例如:

如果我们输入“你好”

    if([[dict objectForKey:@"Category"] isNotEmpty] && [[[dict objectForKey:@"Category"] objectAtIndex:0] class]!=[NSNull class]){
        NSMutableArray * DownloadedTags =[dict objectForKey:@"Category"];
        NSMutableSet * TagsReturn=[NSMutableSet set];
        for(int i=0;i<[DownloadedTags count];i++){
            NSString * Value=[DownloadedTags objectAtIndex:i];
            Tag * thisTag= (Tag*)[GrabClass getObjectWithStringOfValue:Value fromTable:@"Tag" withAttribut:@"Name"];
            [TagsReturn addObject:thisTag];
        }
        NSMutableSet * manyManagedObjects = [BusinessToSave mutableSetValueForKey:@"Tags"];
        [self removeDifferenceBetween2MutableManagedObjectSets:manyManagedObjects withDownloadedVersion:TagsReturn];
    }

所以每个商业都有很多类别。在多线程应用程序中发生的是一个线程放置类别。另一个线程在提交之前也会使用相同的类别。

所以,[GrabClass getObjectWithStringOfValue:Value fromTable:@“Tag”withAttribut:@“Name”];即使某个其他线程已经创建了同一个对象而不知道它,也会给出一个新对象。

如果我同步整个代码将连续运行并且速度很慢。

functionGrab:"H"
functionGrab:"Ha"
functionGrab:"Hal"
functionGrab:"Hall"
functionGrab:"Hallo"

类似的东西,它做了5次这样的功能

我想在后台制作functionGrab,但问题是当我执行该功能而没有同步时它将保存多个数据,因此结果是我的coredata中有5个hallo单词,但是如果我这样做的话同步,它花了这么多时间,这么慢..

有什么方法可以帮我解决问题吗?

1 个答案:

答案 0 :(得分:1)

我建议不要让一个以上的线程“创建”相同类型的数据,因为您遇到的确切原因。

我建议您将所有“创建”排队到单个线程和单个NSManagedObjectContext中,以避免合并或重复问题。

另一种选择是仅使应用程序使用Lion并使用父/子NSManagedObjectContext设计,然后您的孩子将更加“了解”彼此。