2011-04-23 4 views
1

내가 만들고있는 iPhone 응용 프로그램의 데이터를 저장하려고합니다. 내 데이터 구조는 개별 gameArray를 포함하는 gamesArray를 저장하는 것입니다. 각 gameArray에는 날짜, 이름, 집/자리 비움 및 shotArray가 있습니다. shotArray는 샷을 포함합니다. 샷이로드되면 화면에 표시 할 UIButton이 작성됩니다. shotButtonArray는 이러한 버튼을 포함합니다. plist 편집기에서 파일을 볼 때 별개의 배열이 보이지 않습니다. 난 단지 1 배열을 볼 수 있으며 생성 된 모든 객체가 나열됩니다. 왜 그것은 하나의 배열을 보여줄 뿐인가? 다음은 데이터를 저장하는 방법입니다.plist 내에 2 개의 어레이를 가질 수 있습니까?

for (UIButton *button in shotButtonArray) { 

     assert([button isKindOfClass:[UIButton class]]); 
     [button removeFromSuperview]; 
    } 
    for (Shot *shot in shotArray) { 
     [shot subtract_miss_And_make]; 
    } 
    [self reDrawShots]; 
    [shotButtonArray removeAllObjects]; 
    [shotArray removeAllObjects]; 
    [gameArray removeAllObjects]; 
    [gameArray addObject:theDate]; 
    [gameArray addObject:theName]; 
    NSNumber *theNumber = [NSNumber numberWithInt:homeAway]; 
    [gameArray addObject:theNumber]; 
    [gameArray addObject:shotArray]; 
    gameNumber = 0; 
    [gamesArray addObject:gameArray]; 
    NSString *path = [self findGamesPath]; 
    [NSKeyedArchiver archiveRootObject:gamesArray toFile:path]; 

데이터를 잘못 저장하고 있습니까? 왜 하나의 배열 만 보여줄까요?

답변

1

저장하는 방식에 기술적으로 아무런 문제가 없습니다. 나는 혼란 스럽다. 왜 gameArray에 저장하기 전에 shotArray에서 모든 객체를 제거하고 있습니까? 또한 gamesArray 내에 하나의 gameArray 만 저장하는 이유는 무엇입니까?

저장하는 방식에 아무런 문제가 없지만이를 수행하는 더 좋은 방법을 제안합니다. "게임"을 나타내는 새로운 클래스를 만들어야합니다. 이것은 키와 값을 사용하여 날짜, 이름, 숫자 등과 같은 원하는 속성을 저장할 수 있습니다. 당신이 오버라이드 (override)하는 경우 - (무효) encodeWithCoder : (NSCoder *) 해당 클래스의 코더 기능을 당신이 호출 할 수

[coder encodeObject:theData forKey:@"DATE"]; 
[coder encodeInteger:theNumber forKey:@"NUMBER"]; 

을 그런 다음 오버라이드 (override) 할 때 - (무효) encodeWithCoder : (NSCoder *) 인코더는 당신이 액세스 할 수 있습니다

theDate = [[coder decodeObjectForKey:@"DATE"] retain]; 
theNumber = [coder decodeObjectForKey:@"NUMBER"]; 

이 방법, 당신은 단지 루트 객체와 배열을 보관 NSKeyedArchiver를 요청, 이러한 개체의 배열을 만들 수 있으며 모든는 "게임"클래스 내에서 정상적으로 처리됩니다 : 값이 호출 될 수있다. 다른 복잡한 값을 저장하려는 경우 추가 클래스를 만들고 encodeObject 및 decodeObject 함수를 사용할 수 있습니다.

당신은 더 많은 정보를 원하시면 여기를 찾아보실 수 있습니다 : http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html