2010-03-05 2 views
0

저는 Core Data를 이해하려고 노력해 왔으며 가져온 결과에 어려움을 겪고 있습니다. 문제는 '전화 (Telephone)'객체와 다기간 관계가있는 '분기 (Branch)'객체가 있다는 것입니다. 내가 '지점'을 반환하고 NSSet에서 관련된 모든 'Telephone'객체에 액세스하려고하면 하나의 객체 만 반환하는 것처럼 보입니다. 무슨 일이 일어나는지 보려고 사용하고있는 아래 코드를보십시오.ModelObject에서 NSSet에 액세스하는 방법에있어 문제점이 있습니까?

/*************************************************************************************** 
    start testing the fetched objects 
    ***************************************************************************************/ 
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:nil]; 
for (int i=0; i<[results count]; i++) { 
    NSString *sortcode = [[results objectAtIndex:i] valueForKey:@"sortcode"]; 
    NSString *lat = [[results objectAtIndex:i] valueForKey:@"latitude"]; 
    NSString *lon = [[results objectAtIndex:i] valueForKey:@"longitude"]; 
    NSSet *phoneSet = [[results objectAtIndex:i] valueForKey:@"telephone"]; 

    int phoneCount = [phoneSet count]; 
    NSArray *phoneArray = [self arrayFromSet:[[results objectAtIndex:i] valueForKey:@"telephone"]]; 
    for (int j=0; j<[phoneArray count]; j++) { 
     NSString *phoneNumber = [[phoneArray objectAtIndex:j] valueForKey:@"number"]; 
     NSLog(@"%@,%i,%i",phoneNumber,[phoneArray count],phoneCount); 
    } 
    NSLog(@"%@,%@,%@",sortcode,lat,lon); 
} 
/*************************************************************************************** 
    finish testing the fetched objects 
    ***************************************************************************************/ 

이 다음과 같은 출력 결과 : 나는 상황에 개체를 추가 할 경우

2010-03-05 22:05:18.566 AIB[3175:207] 059 9151727,1,1 
2010-03-05 22:05:18.566 AIB[3175:207] 933325,52.802288,-6.737655 
다음

가있다 :

// Add all telephones to this branch 
for (int i=0; i<[telephoneArray count]; i++) { 
    [newTelephone setBranch:newBranch]; 
    [newTelephone setNumber:[[telephoneArray objectAtIndex:i] valueForKey:@"number"]]; 
    [newBranch addTelephoneObject:newTelephone]; 
    NSLog(@"i=%i and phone number=%@", i, [newTelephone valueForKey:@"number"]); 
} 

NSError *error; 
if (![managedObjectContext save:&error]) { 
    // Handle the error. 
    NSLog(@"Save failed with error %@",error); 
} else { 
    NSLog(@"Save was successful"); 
} 

... 그리고 여기의 출력입니다 이상

2010-03-05 22:15:03.217 AIB[3175:6837] i=0 and phone number=059 9151204 
2010-03-05 22:15:03.218 AIB[3175:6837] i=1 and phone number=059 9151179 
2010-03-05 22:15:03.218 AIB[3175:6837] i=2 and phone number=059 9151727 
2010-03-05 22:15:03.231 AIB[3175:6837] Save was successful 
,210
+0

아무것도 나타냅니다 :
따라서,이 라인은 (는 여러 번 추가하지만, NSSet 중복을 허용하지 않습니다 그리고 당신이 어쨌든 원하는 정말 아니다) 세트에 하나 개의 객체를 추가 'phoneSet'에는 하나 이상의 객체가 포함되어 있습니다. 어떻게되는지 당신은 어떻게 압니까? –

+0

에 표시된 모든 것은 전화 번호를 추가하는 데 사용하는 배열에 두 개 이상의 번호가 포함되어있어 실제로 전화 개체 내부의 집합으로 끝나지 않는다는 것입니다. 표시되는 두 번째 코드 집합의 결과에서 매번 번호를 덮어 쓰는 것처럼 보입니다. 집합에 추가하지 않는 것처럼 보입니다. –

+0

흠, 그래, 어쩌면 내가 어떻게 다 객체 관계가 작동하는지 오해한다. 나는 컨텍스트에 '전화'객체를 추가 할 수 있다고 생각했는데,이를 그림과 같이 분기와 관련 시켰습니다. 그러면 단일 '분기'와 관련된 객체 (예 : 테이블의 행)가 삽입됩니다. 나는 완전히 틀린가? – conorgriffin

답변

1

문제는 코드이다 :

// Add all telephones to this branch 
for (int i=0; i<[telephoneArray count]; i++) { 
    [newTelephone setBranch:newBranch]; 
    [newTelephone setNumber:[[telephoneArray objectAtIndex:i] valueForKey:@"number"]]; 
    [newBranch addTelephoneObject:newTelephone]; 
    NSLog(@"i=%i and phone number=%@", i, [newTelephone valueForKey:@"number"]); 
} 

newTelephone 객체 루프의 각 반복에 대한 동일하다. 그 코드에

[newBranch addTelephoneObject:newTelephone]; 
+0

고마워요 @ gerry3, 예 내가 잘못한 것을 깨닫습니다. 그래서 여러 개의'Telephone' 객체를'Branch '에 연관 시키려면,'Branch'에 대한 모든'Telephone' 객체를 포함하는 NSSet을 추가해야합니다, 맞습니까? – conorgriffin

+0

개체를 개별적으로 추가하거나 개체 집합을 추가하거나 개체 집합을 변경할 수 있습니다. – gerry3

관련 문제