2011-09-27 5 views
0

내 응용 프로그램에는 searchBar가 있습니다. 우리는 입력 텍스트, 그것은 예 (인터넷에서 잡아 데이터와 coredata에 저장) 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 : @ "태그"withAttribut : @ "Name"]]; 다른 스레드가 그것을 모른 채 이미 동일한 객체를 생성 했음에도 불구하고 새로운 객체를 제공합니다.

코드가 연속적으로 실행되는 모든 작업을 동기화하면 느려질 것입니다.

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

뭔가 같은, 그 functionGrab 5 번

나는 배경에서 functionGrab을 만들고 싶어하지만, 나는 그것이 이상의 데이터를 저장합니다 동기화없이 그 기능을 수행 할 때 문제가 있으므로 작업을 수행 결과는 내 coredata에 5 hallo 단어가 있지만 동기화와 함께 할 경우, 그것은 너무 많은 시간을 너무 천천히 보냈다 ..

내 문제를 해결하는 방법이 있습니까?

답변

1

실행중인 정확한 이유 때문에 둘 이상의 스레드에서 동일한 유형의 데이터를 "생성"하지 않는 것이 좋습니다.

병합이나 복제 문제를 피하기 위해 모든 "생성"을 단일 스레드와 단일 NSManagedObjectContext에 대기시키는 것이 좋습니다.

다른 옵션은 앱 라이온 만 만들고 부모/자식 NSManagedObjectContext 디자인을 사용하면 자녀가 서로를 "인식"하게됩니다.

관련 문제