2010-08-27 82 views
2

我創建了一個應用程序,數據存儲在plist中。現在有什麼方法可以更新數據?也許如果我創建一個網頁並從中檢索我的數據而不是存儲在plist中?或者有什麼方法可以在插入iTunes時更新我的​​數據?還是有其他建議?我想要實現的是用戶下載應用程序後更新數據的方式。我如何更新iPhone應用程序中的數據

回答

1

由於必須將它們讀回到內存中,進行更改並將它們寫回到文件中,所以修整器不易修改。

編寫plists可以查看NSDictionary或NSArray的writeToFile:atomically:方法。記住你的plist基本上是一個由NSArrays,NSDictionaries,NSStrings和NSData組成的XML,你總是想寫出根節點。

或者查找其他存儲數據的方式:用戶默認值或sqlite數據庫。將數據存儲在雲中僅在某些情況下才有意義,例如您想要在不同設備之間共享數據或想要遠程更新數據。如果可能,最好避免它。

+0

最好是把它做好,而不是避開它。例如。在有連接和更新時更新數據,並在本地緩存數據。使用'NSMutableDictionary'將數據版本或更新日期存儲在plist中。 – Thomas 2010-08-27 07:05:19

+0

嗨,我會遠程更新它。也許像這樣,我可以發送警報告訴用戶更新是否有效等。或者像YouTube應用程序一樣,它如何存儲/檢索所有數據? – Stefan 2010-08-27 07:07:37

+0

嗨托馬斯我怎麼能實現你建議的方法? – Stefan 2010-08-27 07:09:13

2
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *dir = [path objectAtIndex:0]; 
NSString *filePath = [dir stringByAppendingPathComponent:@"my.plist"]; 

NSMutableDictionary *localDictionary; 
NSUrl *remoteUrl = [NSURL URLWithString:@"http://server.com/my.plist"]; 
NSMutableDictionary *remoteDictionary = [NSMutableDictionary dictionaryWithContentsOfURL:remoteUrl]; 
if(remoteDictionary != nil) { 
    [remoteDictionary writeToFile:filePath atomically:YES]; 
    localDictionary = remoteDictionary; 
} 
else { 
    localDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:filePath]; 
    if(localDictionary == nil) localDictionary = [NSMutableDictionary dictionary]; 
} 

這將嘗試從http://server.com/獲得的my.plist副本,成功將其寫入磁盤並點localDictionary它,出錯它會嘗試從磁盤中讀取(例如,先前下載時,有一個連接),如果磁盤上沒有文件,它將創建一個空的NSMutableDictionary。無論哪種方式,localDictionary最後都會指向NSMutableDictionary

這非常簡單,每次運行代碼時都會請求文件。你可以例如使用NSFileModificationDate(由NSFileManger attributesOfItemAtPath:error:獲得)和NSDate來確定是否需要更新。或者對於大文件,版本控制也是有意義的,有一個包含較大文件版本的小文件 - 從服務器獲取小文件(例如使用NSString),檢查緩存版本文件是否包含較低版本號得到大文件。它總是取決於內容刷新的頻率。

查看完整的文檔:NSDictionaryNSStringNSFileManagerNSDate

+0

嗨,my.plist是網頁文件還是?對不起,我還是這個新手。服務器是免費使用的服務嗎?感謝您的幫助 – Stefan 2010-09-02 06:03:03

+0

my.plist只是一個plist文件(請參閱http://en.wikipedia.org/wiki/Property_list),對於少量數據的使用非常方便,因爲您可以序列化並將其寫入文件只有一個命令,並在一個命令中反轉該過程。服務器是你必須得到你自己的東西,通常你也需要一個域(也許2個子域可以路由到不同的服務器,以防萬一掉下來)。您可以使用FTP服務器來代替Web服務器(http)。如果你需要幫助,你應該問別的地方,因爲託管不是編程。 – Thomas 2010-09-02 06:37:43

相關問題