2012-12-18 6 views
2

사용자가 추가 버튼을 누르면 다음 -awakeFromInsert 구현이 UI에 어레이 제어기에 의해 인스턴스화 된 새로운 객체의 속성을 설정 새로운 개체에 의해 수신 될 때 -awakeFromInsert 메시지 :관계는 (NULL) NSOrderedSet

- (void)awakeFromInsert 
{ 
    [super awakeFromInsert]; 
    NSLog(@"Adding perceptron %ld to layer %ld", self.indexInLayer, self.layer.indexInNetwork); 
    NSLog(@"New perceptron added to layer %@", self.layer); 
    // more code here to do the configuration 
} 

문제는 새 객체의 self.parent 관계가 -awakeFromInsert이 호출 될 때 설정되지 않는다는 것입니다 (따라서 nil 임). 따라서 부모 객체에 액세스 할 수 없습니다. 예를 들어, 새 객체가 얼마나 많은 자식인지 또는 새 객체가 어떤 색인인지 등) . 위의 코드의

출력 :

2012-12-17 21:36:39.309 MLPManager[98112:403] Adding perceptron 0 to layer 0 
2012-12-17 21:36:39.309 MLPManager[98112:403] New perceptron added to layer (null) 

은 내가 UITableView가에있는 개체의 인덱스를 추가 할를 호출 할 때 indexInLayer 방법은 완벽하게 작동하기 때문에 새로운 객체가 올바르게 연결되고 있다는 것을 확신 보기 :

- (NSUInteger)indexInLayer 
{ 
    NSUInteger index = [self.layer.perceptrons indexOfObject:self]; 
    //NSLog(@"indexInLayer returning %ld", index); 
    return index; 
} 

내 데이터 모델은 세 기관이있다 : 네트워크, 레이어, 퍼셉트론 주문한 세트로 배열 일대 관계에 의해 다음에 연결 (예 : 부모를 - 자식 - 손자). 내 UI에는 3 개의 어레이 컨트롤러와 3 개의 UITableViews이 있습니다. 하위 배열 컨트롤러에 선택한 부모의 자식 만 포함되도록하고 하위 노드 컨트롤러에 선택한 자식의 손자 만 포함하도록 설정했습니다. 이 배열 컨트롤러에 자식 또는 손자를 추가하면 현재 선택된 부모의 자식으로 자동 설정됩니다. 그건 모두 잘 작동합니다.

UI로 설정 한 시점은 self.layer입니까? 누군가 -awakeFromInsert 이후에 발생했음을 확인할 수 있습니까? 그렇다면 -awakeFromInsert 내에서 새 객체를 구성 할 수 없다면 어떻게해야합니까? -awakeFromInsert에 대한 Apple의 설명서는 "수신기가 처음으로 관리 대상 객체 컨텍스트에 삽입 될 때 Core Data 프레임 워크에 의해 자동으로 호출됩니다"라고 말합니다.

I 데이터 구조의 계층 개체와 다른 부분에 대한 정보를 필요로하는 이유는 I 자동으로 새로운 퍼셉트론 객체 동시에 여러 다른 객체 (퍼셉트론 즈 (Perceptrons)의 하위 가중치)를 인스턴스화 할 필요가있다. 이러한 종류의 작업에 -awakeFromInsert을 사용해야합니까?

답변

0

먼저 코드에서 모델 (NSManagedObject)과보기 (UITableView) 개체 사이에 커플 링이있는 것으로 보입니다. 이는 모델 - 뷰 - 컨트롤러 디자인 패턴에 따라 권장되지 않습니다.

layerindexInLayer은 표준 속성이 NSManagedObject이 아니므로 이러한 속성이 엔티티에 있다고 가정합니다. awakeFromInsert에서 설정을 수행하는 대신, 필요한 데이터를 사용할 수있을 때 필요한 작업을 수행 할 수 있도록 속성에 대한 자체 setter 메소드를 구현할 수 있는지 궁금합니다. 당신이 당신의 자신의 setter 메소드를 구현하도록 선택하는 경우

, 당신은 특히, Managed Object Accessor Methods 문서에서 애플의 지침을 따라야합니다

당신은 (willAccessValueForKey를 관련 액세스를 호출하고 알림 방법을 변경할 수 있는지 확인해야합니다 : , didAccessValueForKey :, willChangeValueForKey :, didChangeValueForKey :, willChangeValueForKey : withSetMutation : usingObjects :, didChangeValueForKey : withSetMutation : usingObjects :)입니다.layerindexInLayerawakeFromInsert 방법하지 가능한 이유

모르겠어요; 대신에 그 문제를 해결할 필요가있을 수 있습니다.