2013-12-12 1 views
12

MagicalRecord에서 어떻게 대체 방법을 찾았습니까 (더 이상 사용되지 않음)? Google, SO 및 문서를 검토했습니다. 아무 것도 대체품으로 보이고, 당연히 문서에서 아무것도 사용되지 않는 방법을 어떻게 대체했는지 알려주지 않습니다. : - {이 MagicalRecord 지원 중단 전화에 대한 대체 방법은 무엇입니까?

[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveErrorHandler:^(NSError *error) 

답변

23

문제의 사용되지 않는 방법은 다음과 같습니다

[NSManagedObjectContext MR_contextForCurrentThread] 
나는 내가 어떤 내 개인 블로그에, 그리고 인정하지만, 얼마 전에 이것에 대해 약간의 blog post을 작성했다

공식 문서. 하지만, TL, DR은 GCD와 대기열의 세계에서 GCD가 스레드에서 실행 되더라도 대기열을 스레드에 1-1로 매핑하는 것을 보장 할 수 없습니다. 확인 일을하는 방법은 다음과 같은 패턴을 사용하는 당신을 위해 앞으로 일 :

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 
    //make your changes in the localContext 
}]; 

이 미묘한 크로스 스레드 문제를 해결을하는 다른 모든 일을해야한다 단순히 규칙을 적용하여 contextForCurrentThread 작물 최대 스레드는 스레드 특정 컨텍스트에 있습니다. 컨텍스트를 다시 저장하지 않고 저장할 때마다 새 컨텍스트를 작성하면 스레드를 교차시키지 않고 앱을 1 % 크래시하지 않는 것이 보장됩니다.

+1

그래서 같은 작품에 동일한

MR_createEntity 

해야 변화입니다 ** MR_saveErrorHandler : **로 대체 할 대상은 무엇입니까? – SpokaneDude

+0

다음 중 누군가 : MR_saveOnlySelfAndWait, MR_saveOnlySelfCompletion :, MR_saveToPersistentStoreAndWait, MR_saveToPersistentStoreCompletion : – casademora

+0

대단히 고맙습니다 ... 다른 주제에서 PDF로 문서를 읽는 것을 좋아합니다 ... 현재의 PDF를 만드는 데 관심이 있습니까? 파일 폴더에있는 파일? 나는 그것을 "앞으로 돈"을 말하고 싶습니다. : D – SpokaneDude

1

casademora는 정확하지만 몇 가지 문제가 발생하기 때문에 내

[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:nil]; 

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) 

로 변환 할 때 나는 당신이 변경하거나 개체를 만드는 데 조심해야 더 정확하게하려고합니다 블록 안에 있지만 충분하지 않습니다.

엔티티를 검색하려면 컨텍스트와 함께 선택 요청을 사용해야합니다.

MR_findFirstByAttribute:withValue 

으로 충분하지 않으며 업데이트가 저장되지 않습니다. 대신

MR_findFirstByAttribute:withValue:InContext:localContext 

을 사용하고 개체를 생성 할 때, 그것은 다음

MR_createEntityInContext:localContext 

가 매력 :)