【问题标题】:Save NSMutableArray to load when reopenning iphone app重新打开 iphone 应用程序时保存 NSMutableArray 以加载
【发布时间】:2010-11-04 05:08:25
【问题描述】:

我有一个 NSMutableArray,这个数组中的每个项目都是不同的类。在每个类中都有许多字段,例如 CPPlot、标识符、...(我正在使用 CorePlot 开发股票应用程序)。现在我想存储这个 NSMutableArray 以在用户重新打开应用程序时加载,这将加载他们之前使用的所有图表。

我试图弄清楚如何在 Stackoverflow 中做到这一点。我发现有两种解决方案:

NSUserDefaults

SQLite 数据库

  1. 在 NSUserDefaults 中,当我想存储 NSMutableArray 时,我必须使用 NSKeyedArchiver 来实现对数组对象的归档和取消归档,还要对数组对象中的每个项目进行 NSCoding 协议。但是我不能做这个解决方案,因为在每个项目中,它都有一些来自 CorePlot 库的字段,所以我不能对这些字段使用 NSCoding。

  2. SQLite 数据库,我不能使用这个解决方案,因为数组对象中的每个项目都是不同的类。

请问有没有其他办法可以解决这个问题?

我希望我的话足够清楚,可以理解。

谢谢

【问题讨论】:

    标签: iphone sqlite nsuserdefaults core-plot nscoding


    【解决方案1】:

    我建议您弄清楚 CorePlot 对象的根是什么类型的数据。如果是整数,则只需将它们存储在 NSUserDefaults 中,然后在重新打开应用程序时重新构建您的 NSMutableArray。另一种选择是将您的项目存储在单独的 plist 文件中。

    【讨论】:

      【解决方案2】:

      使用此方法保存:

      - (NSArray *)applicationDataFromFile:(NSString *)fileName {
          NSArray *paths = NSSearchPathForDirecotiresInDomains(NSDocumentDirectory,
                                                               NSUserDomainMask,
                                                               YES);
          NSString *documentsDirectory = [paths objectAtIndex:0];
          NSString *appFile = [documentsDirectory
                               stringByAppendingPathComponent:fileName];
          NSArray *myData = [NSArray arrayWithContentsOfFile:appFile];
          return myData;
      }
      
      - (BOOL)saveToFileForStringArray:(NSMutableArray *)array
                                toFile:(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 ([array writeToFile:appFile atomically:YES]);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-09
        • 2019-09-15
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-05
        相关资源
        最近更新 更多