<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [?李華明Himi?](http://www.himigame.com/about-himi)原創,轉載務必在明顯處注明: 轉載自[【黑米GameDev街區】](http://www.himigame.com/)?原文鏈接:?[http://www.himigame.com/iphone-cocos2d/513.html](http://www.himigame.com/iphone-cocos2d/513.html "【iOS-Cocos2d游戲開發之十九】游戲數據存儲的四種常用方式NSKeyedArchiver/NSUserDefaults/Write寫入/SQLite3") [](http://blog.csdn.net/xiaominghimi/article/details/6948046) OK,今天Himi介紹游戲存儲這一塊,在Android游戲開發中Himi介紹了好幾種保存的方式和形式,那么在iOS中也有幾種方式,一般常用的有以下四種形式: 1.NSKeyedArchiver(加密形式) 2.NSUserDefaults 3. ?Write寫入方式 4.SQLite3 這里Himi就不再介紹SQlite數據庫了,Android游戲存儲中我也介紹過SQLite如何保存數據,但是由于這一塊很多童鞋沒有接觸過數據庫相關知識,所以即使講了也沒作用,那么對于數據數據庫的童鞋們可以參考其他博文或書籍進行學習; 首先介紹第一種保存方式:NSKeyedArchiver 代碼很簡單就不多解釋了直接上代碼:? ~~~ //=================NSKeyedArchiver========================??? NSString?*saveStr1?=?@"我是";?? NSString?*saveStr2?=?@"數據";?? NSArray?*array?=?[NSArray?arrayWithObjects:saveStr1,?saveStr2,?nil];??? //----Save?? //這一句是將路徑和文件名合成文件完整路徑?? NSString?*Path?=?[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES)?objectAtIndex:0];??? NSString?*filename?=?[Path?stringByAppendingPathComponent:@"saveDatatest"];?? [NSKeyedArchiver?archiveRootObject:array?toFile:filename];?? //用于測試是否已經保存了數據?? saveStr1?=?@"hhhhhhiiii";?? saveStr2?=@"mmmmmmiiii";??? //----Load?? array?=?[NSKeyedUnarchiver?unarchiveObjectWithFile:?filename];?? saveStr1?=?[array?objectAtIndex:0];?? saveStr2?=?[array?objectAtIndex:1];??? CCLOG(@"str:%@",saveStr1);?? CCLOG(@"astr:%@",saveStr2);?? ~~~ 首先介紹第二種保存方式:NSUserDefaults 代碼很簡單就不多解釋了直接上代碼: ~~~ //=================NSUserDefaults========================?? NSString?*saveStr1?=?@"我是";?? NSString?*saveStr2?=?@"數據";?? NSArray?*array?=?[NSArray?arrayWithObjects:saveStr1,?saveStr2,?nil];??????????? //Save?? NSUserDefaults?*saveDefaults?=?[NSUserDefaults?standardUserDefaults];?? [saveDefaults?setObject:array?forKey:@"SaveKey"];?? //用于測試是否已經保存了數據?? saveStr1?=?@"hhhhhhiiii";?? saveStr2?=@"mmmmmmiiii";???? //---Load?? array?=?[saveDefaults?objectForKey:@"SaveKey"];?? saveStr1?=?[array?objectAtIndex:0];?? saveStr2?=?[array?objectAtIndex:1];?? CCLOG(@"str:%@",saveStr1);?? CCLOG(@"astr:%@",saveStr2);?? ~~~ 首先介紹第三種保存方式:Write寫入方式 代碼很簡單就不多解釋了直接上代碼: ~~~ //=================Write寫入方式========================?? NSString?*saveStr1?=?@"我是";?? NSString?*saveStr2?=?@"數據";?? NSArray?*array?=?[NSArray?arrayWithObjects:saveStr1,?saveStr2,?nil];??? //----Save?? NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);?? NSString?*documentsDirectory?=?[paths?objectAtIndex:0];?? if?(!documentsDirectory)?{?? ????NSLog(@"沒找到");?? }?? NSMutableArray?*saveDataArray=nil;?? NSString?*appFile?=?[documentsDirectory?stringByAppendingPathComponent:@"Savedatas.plist"];?? [[NSArray?arrayWithObjects:array,nil]?writeToFile:appFile?atomically:NO];?? //用于測試是否已經保存了數據?? saveStr1?=?@"hhhhhhiiii";?? saveStr2?=@"mmmmmmiiii";???? //----Load?? if([[NSFileManager?defaultManager]?fileExistsAtPath:appFile]){?? ????saveDataArray?=?[NSMutableArray?arrayWithContentsOfFile:appFile];?????? }?else{?? ????saveDataArray?=?[NSMutableArray?arrayWithContentsOfFile:[[NSBundle?mainBundle]?pathForResource:@"Savedatas"?ofType:@"plist"]];?? }?? NSArray?*strArray?=?[saveDataArray?objectAtIndex:0];??? saveStr1?=?[strArray?objectAtIndex:0];?? saveStr2?=?[strArray?objectAtIndex:1];?? CCLOG(@"str:%@",saveStr1);?? CCLOG(@"astr:%@",saveStr2);??? ~~~ 不論哪種形式代碼都很容易理解,那么以上三種保存方式代碼中都帶有如下兩行代碼; ~~~ saveStr1?=?@"hhhhhhiiii";?? saveStr2?=@"mmmmmmiiii";??? ~~~ 我已經注釋上了,為了驗證是否保存數據成功,如果沒有保存成功,最后打印的肯定就是hhhhhhiiiiiiiii,mmmmiiiii啦~正常保存的話如下圖控制臺信息: ![](https://box.kancloud.cn/2016-03-31_56fcd01cdc7de.png) 由于本章介紹過于簡單,那么下面Himi對Write寫入方式保存數據和讀取數據封裝了兩個方法這里放出,給童鞋們行個方便:(其他兩種大家封裝起來風容易了,這里就不寫了); 封裝的函數如下: ~~~ //保存游戲數據?? //參數介紹:?? //???(NSMutableArray?*)data?:保存的數據?? //???(NSString?*)fileName?:存儲的文件名?? -(BOOL)?saveGameData:(NSMutableArray?*)data??saveFileName:(NSString?*)fileName?? {?? ????NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);?? ????NSString?*documentsDirectory?=?[paths?objectAtIndex:0];?? ????if?(!documentsDirectory)?{?? ????????NSLog(@"Documents?directory?not?found!");?? ????????return?NO;?? ????}?? ????NSString?*appFile?=?[documentsDirectory?stringByAppendingPathComponent:fileName];?? ????return?([data?writeToFile:appFile?atomically:YES]);?? }?? //讀取游戲數據?? //參數介紹:?? //???(NSString?*)fileName?:需要讀取數據的文件名?? -(id)?loadGameData:(NSString?*)fileName?? {?? ????NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);?? ????NSString?*documentsDirectory?=?[paths?objectAtIndex:0];?? ????NSString?*appFile?=?[documentsDirectory?stringByAppendingPathComponent:fileName];?? ????NSMutableArray?*myData?=?[[[NSMutableArray?alloc]?initWithContentsOfFile:appFile]?autorelease];?? ????return?myData;?? }?? ~~~ 使用代碼如下: ~~~ NSString?*saveStr1?=?@"測試保存讀取";?? NSString?*saveStr2?=?@"兩個函數";?? NSMutableArray?*array?=?[NSMutableArray?arrayWithObjects:saveStr1,?saveStr2,?nil];??? [self?saveGameData:array?saveFileName:@"Himi"];?? NSMutableArray*temp?=(NSMutableArray*)[self?loadGameData:@"Himi"];?? CCLOG(@"%@--%@",[temp?objectAtIndex:0],[temp?objectAtIndex:1]); ~~~ 運行效果截圖如下: ![](https://box.kancloud.cn/2016-03-31_56fcd01d1dbae.png) 這里Himi要提醒大家兩點細節也是需要注意的地方: 1.對于取出數據的時候需要注意,例如如下代碼: ~~~ NSUserDefaults?*saveDefaults?=?[NSUserDefaults?standardUserDefaults];??? NSMutableArray?*arraySaveData?=[saveDefaults?objectForKey:@"OhSaveData"];?? //NSMutableArray?*arraySaveData=[NSMutableArray?arrayWithArray:[saveDefaults?objectForKey:@"OhSaveData"]];?? ~~~ 第二句代碼是通過一個文件名獲取你存儲的數據,返回數據數組,但是!一定要注意這里返回的數據數組是不可修改的!及時你將讀取的數據賦給一個可修改的數組中也一樣無法修改其中的數據,所以如果你想將取出的數據進行修改那么這里需要要使用第三行代碼來獲取,這里Himi將獲取出的數據數組首先copy給了可修改數組中,那么此時你的可修改數組就可以正常修改了! 2.修改已經的存儲文件;代碼如下: ~~~ NSUserDefaults?*saveDefaults?=?[NSUserDefaults?standardUserDefaults];??? [saveDefaults?setObject:arraySaveData?forKey:@"已經存在的文件名"];?? ~~~ arraySaveData:表示新的數據數組 OK,本篇就介紹這里吧~繼續忙了~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看