每当单击刷新按钮时,如何更新 iOS 应用程序包中的嵌入式 JSON 文件

Posted

技术标签:

【中文标题】每当单击刷新按钮时,如何更新 iOS 应用程序包中的嵌入式 JSON 文件【英文标题】:How to update embedded JSON file in iOS app bundle whenever refresh button is clicked 【发布时间】:2014-03-01 09:31:00 【问题描述】:

我有一个应用程序,其中我的数据以JSON 格式离线,但我希望应用程序在触摸刷新按钮时从互联网更新JSON 文件。

我使用JSON 文件作为本地数据库,更新数据库时将在服务器上生成更新的数据库。该应用程序应从 Internet 下载 JSON 文件并将其用作本地数据库。

如何才能做到这一点?我对要使用什么方法以及如何完成感到困惑。

【问题讨论】:

【参考方案1】:

您无法覆盖与您的应用捆绑的JSON。但是,您可以更新存储在应用程序包之外的 JSON - 例如在应用程序的 Documents 文件夹中。

您将需要保存JSON 的方法:

-(void)saveJSONWithData:(NSData *)data

     NSString *path = [[self applicationDocumentsDirectory] stringByAppendingFormat:@"/data.json"];

     [data writeToFile:path atomically:YES];



- (NSURL *)applicationDocumentsDirectory 

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
                                                   inDomains:NSUserDomainMask] lastObject];

您还需要下载JSON。最好的方法是在后台执行请求,这样UI 线程就不会被阻塞。

- (void)getJSONDataAtURL:(NSURL *)urlWithJSON

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^
    
        // Download the data in background.
        NSData *data = [NSData dataWithContentsOfURL:urlWithJSON];

       [self saveJSONWithData:data];

        dispatch_async(dispatch_get_main_queue(), ^
        
            // Do your tasks on the main thread.
        );
    );

【讨论】:

所以我必须在文档文件夹中设置我的默认数据,即 json 文件,然后更新它 是的,你是对的。此外,您可以做的是,当您的应用程序第一次启动时,只需将 JSON 数据从应用程序包复制到 Documents 并始终引用此位置,而不是从包中读取原始 JSON 或 Documents .

以上是关于每当单击刷新按钮时,如何更新 iOS 应用程序包中的嵌入式 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从QDialog刷新/更新/重绘QMainWindow?

如何在单击按钮时使用参数更新 DataTable?

如何避免页面刷新按钮事件

如何在GWT中更新后刷新网格?

如何将未来列表设置为列表并更新 ListView

每当单击按钮时如何重置计时器