2011-09-27 79 views
0

在我的應用程序中有searchBar。當我們輸入文字,它會做functionGrab(抓取數據從互聯網上,並將其保存到coredata),例如:在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]; 
    } 

所以每個BIZ有許多種類。多線程應用程序中發生的是一個線程放置類別。另一個線程在提交之前也會放入相同的類別。

因此,[GrabClass getObjectWithStringOfValue:值fromTable:@ 「標籤」 withAttribut:@ 「名稱」];即使某些其他線程在不知道它的情況下已經創建了相同的對象,也會給出一個新對象

如果我同步了整個事情的代碼會連續運行,那將是緩慢的。

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

類似,它做functionGrab 5倍

我想要在後臺functionGrab,但問題是,當我做到這一點功能,無需同步,它會保存數據的不止一個,所以結果是,有5個hallo的話在我coredata,但如果我這樣做與同步,它花了這麼多時間,這麼慢..

有沒有什麼辦法來幫助我的問題?

回答

1

我不建議有一個以上的線程「創造」同一類型的數據對您正在運行到的確切原因。

我建議你排隊所有的「創造」成單個線程和一個NSManagedObjectContext以避免合併或重複的問題。

另一種選擇是隻製作應用程序Lion,並使用父母/子女NSManagedObjectContext設計,然後您的孩子會更「意識到」彼此。