2013-02-15 5 views
2

코어 데이터의 실제 작동 방식을 명확하게 이해하지 못했습니다. 나는 이것이 내가 직면 한 결과일지도 모른다. 응용 프로그램을 통해 단일 managedObjectContext을 사용하는 응용 프로그램이 있습니다. managedObjectContext가 그 안에있는 모든 managedObjects를 보유하고 있으며 컨텍스트를 다시 설정할 때까지는 객체가 항상 컨텍스트 자체에 유지된다는 것을 알고 있습니다. 그래서, 내가 할 일은 사용자 데이터와 같은 몇 가지 주요 객체를 가져온 다음 동일한 객체를 뷰 컨트롤러 전체에 전달하는 것입니다. 몇 가지 변경 사항이 발생하면 객체는 다른 코드에 의해 새로 고쳐집니다. 이것은 거의 모든 경우에 효과가 있습니다.코어 데이터 및 NSManagerObject 유지

그러나 나는 어떤 보기 컨트롤러에서 개체에 대한 강력한 포인터를 유지하지 않습니다. 객체가 managedObjectContext 풀에 의해 유지되기 때문에 약한 참조 만 유지합니다. 그러나 나는 원격으로 동기화하여 개체를 새로 고칠 때이 전략에 문제가있을 수 있습니다. 내 약한 포인터가 쓸모 없게됩니다. 그것에는 데이터가 없습니다. 모든 속성이 비어있게됩니다. 로그 할 때 모든 애트리뷰트 이름을 보여 주지만, 값은 아무 것도 없다. 객체가 항상 새로 고쳐지고 기본 컨텍스트와 동기화되는지 확인하려면 어떻게합니까? managedObject의 포인터를 약하게 유지하는 것은 나쁜 생각입니다. 나는 모든 viewcontroller 그것을 유지하지 말 것입니다. 모든보기 컨트롤러는 약한 포인터를 사용합니다. 나는 데이터를 가져 루트 뷰 컨트롤러에서 내 코드는 다음과 같을 것이다

,

,

-(void)tableView:(UITableView*)tv didSelectRowAtIndexPath:(NSIndexPath*)indexPath{ 
    User *user = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    FirstViewController *firstViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"firstViewController"]; 
    firstViewController.user = user; 
} 

FirstViewController :

@interface FirstViewController:UIViewController 
    @property(nonatomic, weak) User *user 
@end 

나는 개체와 많은 일을 여기 그리고 당장은 rootViewController에서 객체를 업데이트 할 수 있습니다. 그러나, 그것은 동일한 객체이기 때문에 대부분의 시간에 업데이트됩니다.

다시 첫 번째보기 컨트롤러;

-(void)tableView:(UITableView*)tv didSelectRowAtIndexPath:(NSIndexPath*)indexPath{ 
    User *user = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    SecondViewController *secondViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondViewController"]; 
} 

SecondViewController :

@interface SecondViewController:UIViewController 
    @property(nonatomic, weak) User *user 
@end 

여기서 다시, 개체가 약하게 참조됩니다. 객체로 많은 일을하거나 다른 뷰 컨트롤러가 원격에서 동기화 할 수 있지만 계속 업데이트됩니다. 이 객체는 마지막 뷰 컨트롤러와 모든 뷰 컨트롤러가 약한 포인터를 유지할 때까지 심층 계층에 전달됩니다.

대부분의 경우 꽤 괜찮습니다. 그러나 개체가 네트워크에 동기화 된 경우에도 현재 뷰 컨트롤러에서 여러 번 null로 표시됩니다. 즉 개체가 모든 속성 설명과 함께 계속 있지만 값이없는 것입니다. 그러나 얼마 후 갑자기 나타납니다.

무슨 일이 일어 났을 수 있습니다. 개체를 루트 컨텍스트에 동기화 된 상태로 유지하고 변경이 발생하면 새로 고치는 방법은 무엇입니까? 강력한 포인터를 유지하면 내 모든 문제를 해결할 수 있을까요? 나는 그것이 잘못되지 않았기 때문에 그것이있을 것 같아요. 다른 모든 개체에서 볼 수 있도록 개체의 한 개체를 독점적으로 오류를 발생시키는 방법은 무엇입니까?

정말 감사드립니다. 나는 영어가 좋지 않을지 모르지만 어떤 사람들이 내 질문을 이해하고 더 나은 방법으로 그것을 표현할 수 있다면 나는 그 사실에 대해서 정말 행복 할 것이다.:)

답변