在我的应用程序中有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单词,但是如果我这样做的话同步,它花了这么多时间,这么慢..
有什么方法可以帮我解决问题吗?
答案 0 :(得分:1)
我建议不要让一个以上的线程“创建”相同类型的数据,因为您遇到的确切原因。
我建议您将所有“创建”排队到单个线程和单个NSManagedObjectContext
中,以避免合并或重复问题。
另一种选择是仅使应用程序使用Lion并使用父/子NSManagedObjectContext
设计,然后您的孩子将更加“了解”彼此。