ios - 在应用启动时打开大型json文件,迫使启动时间较长

标签 ios json xcode

我正在创建一个由不同游戏板组成的游戏,这些游戏板作为字典存储在数组中,并存储在json文件中。 json文件很大,数组中有3,000个对象,大小约为23mb。我目前加载此文件的方式是在appDelegate实现文件的didFinishLaunchingWithOptions中,如下所示:

NSString * filePath =[[NSBundle mainBundle] pathForResource:@"words" ofType:@"json"];

NSError * error;
NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];


if(error)
{
    NSLog(@"Error reading file: %@",error.localizedDescription);
}


NSDictionary *data = (NSDictionary *)[NSJSONSerialization
                                      JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
                                      options:0 error:NULL];

wordsArray = [[NSMutableArray alloc]initWithArray:[data objectForKey:@"results"]];

然后,我可以调用以下命令从应用程序中的任何位置检索数组:
NSArray *wordsArray = appDelegate.wordsArray;

该应用程序的运行效果非常好,除了该应用程序在iPhone 4设备上加载需要花费15秒以上的时间(时间过长),而且我了解到,如此长时间的加载时间可能会导致应用程序被拒绝。

有人可以提出更好的方法来解决这个问题吗,

谢谢

最佳答案

正如Yedidya所建议的那样,您可能想要显示一些有趣的东西来保持用户的参与度。

最重要的是,最重要的是:

  • 保持您的用户界面响应
  • 在后台线程上加载文件/网络资源。有足够的代码示例显示相同的内容。使用performselectorOnBackgrounddispatch_async(some_global_queue)中的一种执行后台任务。
  • 完成后,使用performselectorOnMainThreaddispatch_asynch(dispatch_get_main_queue)返回主屏幕/游戏界面。

  • 要点如下:
        //START BUSY CURSOR HERE
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
        ^{
            // Read JSON file here
            dispatch_async(dispatch_get_main_queue(), 
          ^{
            //STOP BUSY CURSOR 
           //PERFORM UI UPDATE HERE
        });
    

    关于ios - 在应用启动时打开大型json文件,迫使启动时间较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31384661/

    相关文章:

    ios - 如何使用 objective-c 直接在iPhone照片中打开特定相册

    ios - FBSDKCoreKit错误: "Include of non-modular header inside framework module"

    iphone - Xcode 上奇怪的编译时错误

    ios - 音频时间戳格式 + 'MusicDeviceMIDIEvent'

    ios - 如何转发声明 CoreFoundation 类型?

    ios - NSIncationOperation init 从类方法调用实例方法返回 nil

    json - 对 Perl 数据结构的每个元素应用不同的函数

    ios - 在 if/else 语句中查询 NSDictionary 的值

    javascript - 安全地清理用户在 Rails 中上传的 json

    ios - 存档的 iOS 框架的路径