2014-10-10 98 views
-1

我在蘋果應用程序商店有一個測驗應用程序。問題存儲在Plist文件中。我正在尋找的方法是通過下載新版本來更新Plist文件,而不必每次有新的問題時都要提交更新通過下載更新Plist文件iOS

有沒有人知道一個體面的教程可以幫助我?

非常感謝。

+0

[DOWNLOADFile](http://stackoverflow.com/questions/19101179/download-plist-from-server)___ [deletionFile](http://stackoverflow.com/questions/15505529/delete-file-obj- c) – 2014-10-10 15:50:42

回答

0

我不知道有關的教程,但步驟來實現你的描述非常簡單:

  1. 到遠程數據創建一個URL請求
  2. 解析返回的數據
  3. 寫解析數據到一個新的地方的plist

如:

// Create a NSURL to your data 
NSString *dataPath = @"www.mydata.com/path"; 
NSURL *dataURL = [NSURL URLWithString:dataPath]; 

// Create an asycnhronous request along with a block to be executed when complete 
[NSURLConnection sendAsynchronousRequest:[[NSURLRequest alloc] initWithURL:dataURL] 
            queue:[[NSOperationQueue alloc] init] 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
{ 
    if (error) { 
     NSLog(@"%@", error.localizedDescription); 
     // Handle the request error 
    } 
    else { 
     // We have some data, now we need to serialize it so that it's usable 
     NSError *serializationError; 
     NSDictionary *serializedDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&serializationError]; 
     if (serializationError) { 
      NSLog(@"%@", serializationError.localizedDescription); 
      // Handle the serialization error 
     } 
     else { 
      // We have a serialized NSDictionary, now we just want to write it 
      // First we create the path to write it to, eg. uers documents directory 
      NSURL *documentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
      // Then write it 
      BOOL success = [serializedDictionary writeToFile:documentsDirectory.path atomically:YES]; 
      if (!success) { 
       NSLog(@"Error writing file"); 
      } 
     } 
    } 
}]; 

注意:您可能想考慮將數據存儲在遠程數據庫中,如Parse。通過這種方式,您可以查詢新問題,只下載這些問題,以免使用不必要的帶寬。您也可以考慮使用Core Data來維護您的本地數據,而不是將它寫入plist。主要優點是您無需將整個plist串行化爲內存以便使用它 - 您只需查詢所需的特定問題即可。

希望這會有所幫助。

+0

我已經使用Parse推送通知,但不知道它也可以這樣做。關於退出Plist的唯一問題是已經存在並遷移它的3000個問題。 – nobbsy 2014-10-10 16:27:44

+0

數據驅動應用程序的一個常見做法是使用plist作爲起點,並將其輸入到「核心數據」中。然後,您可以合併定期的服務器查詢以查看是否有新內容,如果有,使用新的遠程數據更新'Core Data' – chrysAllwood 2014-10-10 16:32:48

+0

因此,示例流程可能是: - 啓動時檢查是否已填充「Core Data」 (例如運行一個沒有謂詞的查詢) - 如果它返回0個對象,那麼這是第一次啓動,所以序列化你的plist,然後迭代每個問題,爲每個問題插入一個新的NSManagedObject - 否則,你已經完成了這項工作 - 「核心數據」很好用 - 在上次更新後更新的所有問題的查詢解析(通過存儲在NSUserDefaults中的'NSDate'記錄此問題) - 如果有任何問題結果,然後爲它們創建新的NSManagedObjects或更新當前的 – chrysAllwood 2014-10-10 16:42:30