【问题标题】:How to Archive Two Arrays with NSKeyedArchiver如何使用 NSKeyedArchiver 归档两个数组
【发布时间】:2012-12-11 20:22:34
【问题描述】:

我已经阅读了很多关于使用 NSKeyedArchiver 归档单个数组的内容。但是我将如何保存两个数组?

我需要为 UITabBarController 中的两个视图控制器存储/检索数据。两个视图控制器中的每一个都创建相同自定义类的对象,但将它们存储在每个视图控制器的单独数组中。

我当前的代码使用单独的方法来保存每个数组。问题是在归档第二个数组时,它会覆盖第一个数组。我不能让他们两个都拯救。我想我要么需要将两个数组保存到自己的文件中,要么将数据合并到一个文件中。我只是不确定如何为此编写代码。谁能帮忙??

- (void)saveFermentableIngredients
{
    NSMutableData *fermentableData = [[NSMutableData alloc] init];
    NSKeyedArchiver *fermentableArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:fermentableData];
    [fermentableArchiver encodeObject:self.fermentableIngredients forKey:@"FermentableIngredients"];
    [fermentableArchiver finishEncoding];
    [fermentableData writeToFile:[self dataFilePath] atomically:YES];
}

- (void)saveHopIngredients
{
    NSMutableData *hopData = [[NSMutableData alloc] init];
    NSKeyedArchiver *hopArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:hopData];
    [hopArchiver encodeObject:self.hopIngredients forKey:@"HopIngredients"];
    [hopArchiver finishEncoding];
    [hopData writeToFile:[self dataFilePath] atomically:YES];
}

我应该提到,我已经完成了这里的常规设置,实现了 initWithCoder 和 encodeWithCoder 方法。我怀疑问题确实出在我上面发布的代码中。

【问题讨论】:

    标签: iphone objective-c nskeyedarchiver


    【解决方案1】:

    如果您希望将所有这些数据存储在一起,那么您应该执行以下操作:

    - (void)encodeWithCoder:(NSCoder *)aCoder {
        [aCode encodeObject:self.fermentableIngredients forKey:@"FermentableIngredients"];
        [aCode encodeObject:self.hopIngredients forKey:@"HopIngredients"];
    }
    

    【讨论】:

      【解决方案2】:

      我最终将每个数组保存到一个单独的文件中。首先,我声明了两个单独的文件路径,如下所示:

      - (NSString *)fermentableDataFilePath
      {
          return [[self documentsDirectory] stringByAppendingPathComponent:@"Fermentables.plist"];
      }
      
      - (NSString *)hopDataFilePath
      {
          return [[self documentsDirectory] stringByAppendingPathComponent:@"Hops.plist"];
      }
      

      然后我在原始问题中的保存方法中引用了每个文件路径。所以在第一种方法中,我会这样写我的 writeToFile 方法:

      [fermentableData writeToFile:[self fermentableDataFilePath] atomically:YES];
      

      【讨论】:

      • 嗨,马克,如果您觉得它有帮助/可以接受,您应该接受最佳答案。如果这是最好的,那包括你自己的答案。
      【解决方案3】:

      解决此问题的另一种方法是将两个(或更多)数组放入字典中。然后,您可以将字典归档到单个文件中,并使用您分配的键检索数组。您可以以这种方式归档多个项目,而无需使用 NSCoder 或创建多个归档。一个限制,因为它是一个字典,是你存储的值必须都是相同的类型。我以这种方式存档了一个 SCNNode 数组字典,效果很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-01
        • 1970-01-01
        相关资源
        最近更新 更多