2011-04-23 28 views
1

我正在嘗試保存我正在構建的iphone應用程序的數據。我的數據結構是保存包含單個gameArray的gamesArray。在每個遊戲陣列中,我有一個日期,名稱,主頁/離開,和一個shotArray。 shotArray包含鏡頭。加載時創建的UIButtons顯示在屏幕上。 shotButtonArray包含這些按鈕。當我在plist編輯器中查看我的文件時,看不到不同的數組。我只看到1個數組,並且所有創建的對象都剛剛列出。爲什麼它只顯示一個數組。這裏是我如何保存我的數據我可以在plist中有兩個數組嗎?

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中刪除所有對象?另外,你爲什麼只在gameArray中存儲一個gameArray?

儘管保存這種方式沒有問題,但我會建議更好的方法來做到這一點。你應該創建一個代表「遊戲」的新類。這可以使用鍵和值保存您想要的屬性,如日期,名稱,編號等。如果覆蓋 - (無效)encodeWithCoder:(NSCoder *)在該類編碼器功能,您可以撥打:

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

然後,當你覆蓋 - (無效)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

相關問題