2011-04-22 2 views
1

다른 카드가 많은 iPhone 응용 프로그램을 개발 중입니다. 각 카드는 자동차를 나타냅니다. 따라서 모든 카드에는 인스턴스 변수와 이미지가 있습니다. 내 클래스 CarCard는 .plist 파일에서 각 자동차에 대한 데이터를로드하고 있습니다. 루프마다 많은 인스턴스를 만들어 각 인스턴스에 다른 이름을 지정하려고합니다. 예 :iOS에서 동일한 클래스의 다른 인스턴스에 이름을 지정하는 방법 - iPhone

CarCard *car1 = [[CarCard alloc] initWithSomeINfo: info]; 
....... *car2 ..........................................; 

....... *carN ..........................................; 

여기서 N은 자동차의 수입니다. 문제는 매번 N이 무엇인지 모르겠다는 것입니다. 그래서 루프에서 인스턴스를 만들어야하지만 인스턴스에 다른 이름을 지정하는 방법을 찾을 수 없습니다.

답변

2

개체는 훨씬 더 좋은 방법입니다. 루프의 외부를 인스턴스화 :

NSMutableArray *cardArray = [[NSMutableArray alloc] init]; 

다음 루프 안에 당신이 당신의 객체를 추가 할 것입니다 :

이제
[cardArray addObject:car]; 

당신이 그들의 인덱스에 의해 액세스 할 수 있습니다 :

// Card 9, numbering starts at 0 
myCar = [cardArray objectAtIndex:8]; 

덧붙여 편집 됨

배열의 위치 대신 이름으로 카드를 참조하고 이름이 고유 한 경우 사전을 사용하여 카드를 이름으로 참조 할 수 있습니다. 루프의 외부 사전을 인스턴스화 :

NSMutableDictionary *cardDictionary = [[NSMutableDictionary alloc] init]; 

다음 루프 안에 당신이 당신의 객체를 추가 할 것입니다 :

당신은 자신의 이름으로 액세스 할 수 있습니다 지금
[cardDictionary setObject:car forKey:cardName]; 

:

// Card with the key named "card9" 
myCar = [cardDictionary objectForKey:@"card9"]; 

// Card with the key named "monkey" 
myCar = [cardDictionary objectForKey:@"monkey"]; 
+0

감사합니다. 문제는이 카드를 멀티 플레이어 게임에 사용한다는 것입니다. 그래서 otherPlayer가 자신의 덱에 가지고있는 카드의 이름과 OPPONENTS 카드의 이름을 보내어 2 개의 덱 (셔플 후)을 만드는 데 필요한 정보를주고 싶습니다.그런 다음 두 플레이어는 카드의 속성을 비교해야하므로 각 인스턴스에 고유 한 이름이 있으면 카드 인스턴스 이름이 아닌 카드 인스턴스 이름 만 인터넷을 통해 보내면 유용합니다. 그것에 관한 어떤 생각? –

+0

그래도 중앙 데크 아이디어는 플레이어가 자신의 카드를받는 갑판을 여전히 보유하고 있습니까? 따라서 덱을 배열로 만든 다음 카드를 처리/분할하여 덱에서의 위치와 마스터 덱에 저장 한 카드 이름으로 식별 된 카드의 손을 만듭니다. 플레이어는 마스터 배열의 카드 이름과 색인을 보내고 카드를 재생할 때 색인을 보내면됩니다. NSMutableDictionary를 사용하여 더 잘 작동 할 수있는 다른 답변을 추가하겠습니다. –

0

왜 CarCard의 인스턴스를 만들고 단순히 배열에 추가하면 안됩니까? N이 무엇인지 아는 경우 루프는 매우 간단합니다.

NSMutableArray *carCards = [[NSMutableArray alloc] initWithCapacity:N]; 
for(int i=0; i<N; i++) { 
    NSDictionary *car = [NSDictionary dictionaryWithContentsOfFile:<plist-i>]; 
    CarCard *carCard = [[[CarCard alloc] initWithSomeInfo:car] autorelease]; 
    [carCards addObject:carCard]; 
} 

이와 비슷한 것입니다. 이게 도움이 되니?

0

당신에게 NSMutableDictionary를 만들고 그것을 채울 수 있습니다.

for (int count = 1; count <= totalCars; count++) 
    [carDict setObject:[[CarCard alloc] initWithSomeInfo:info] forKey:[NSString stringWithFormat:@"car%d", count]]; 

그런 다음 당신이 어떤 번호가 객체 얻을 수 있습니다 : 당신은 이미 당신이 만들 필요가 얼마나 많은 값을합니다 (PLIST에서) 알고 가정 할 때,이 같은 것을 쓸 수 또는

CarCard someCard = [carDict objectForKey:[NSString stringWithFormat:@"car%d", selectedNumber]]; 

을 수행 할 수 있습니다 NSDictionary의 allValues 메서드를 사용하여 값 배열을 가져 오십시오.

NSArray *allCards = [carDict allValues];