【问题标题】:What's the Objective-C approach to creating a matrix and storing it to a file?Objective-C 创建矩阵并将其存储到文件的方法是什么?
【发布时间】:2011-01-14 23:14:16
【问题描述】:

Objective-C/iPhone 初学者在这里...寻找正确的方向。

我需要创建一个稍后将使用 CoreData 存储的数组。实际上,最好将其描述为 n x m 矩阵。每一行都是一条记录。所有数据都是整数。

类似这样的:

struct record
{
 int index;
 int mode;
 int counter;
};

struct record database[20];

我在这里解释一下。这不是数据库应用程序。有问题的矩阵包含运行状态机所需的数据。但是,你明白了。一堆整数行。

考虑到我需要将矩阵保存到文件系统,最好的 O-C 方法是什么。

我可以使用结构的 NSArray 吗? (我不认为 N​​SArray 喜欢非对象类型)。

NSArray 的 NSArray 的?

NSDictionary 的 NSArray?

谢谢,

-马丁

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    我个人会创建一个 2D 数组,即 NSArray 的 NSArray,其中包含整数。我假设您的数据实际上不仅仅是整数,而是自定义对象......在这种情况下,只需让您的 NSObjects 符合 NSCoding 协议并编写一些序列化代码(2个方法,非常简单的东西,一个打包对象,一个解包对象)然后整个矩阵(对象图),可以很容易地保存和加载。

    这是取自 Apple 文档的示例编码方法:

    - (void)encodeWithCoder:(NSCoder *)coder {
        [super encodeWithCoder:coder];
        [coder encodeObject:mapName forKey:@"MVMapName"];
        [coder encodeFloat:magnification forKey:@"MVMagnification"];
        [coder encodeObject:legendView forKey:@"MVLegend"];
        [coder encodeConditionalObject:auxiliaryView forKey:@"MVAuxView"];
    }
    

    解码方法非常相似。它们都允许您在数据保存之前/加载之后修改和检查数据(如果需要)。

    此页面包含您需要的信息: http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Archiving/Articles/codingobjects.html%23//apple_ref/doc/uid/20000948-BCIHBJDE

    虽然文档通常很难学习,但这里有另一个很好的资源: http://www.raywenderlich.com/1914/how-to-save-your-app-data-with-nscoding-and-nsfilemanager

    祝你好运,如果有什么不清楚的地方欢迎随时提问。

    【讨论】:

      【解决方案2】:

      你是对的。 NSArray 只接受继承自 NSObject 的对象。因此,您可以使用 NSArrays 数组,或者将结构转换为从 NSObject 继承的对象并将其存储在数组中。这样做的好处是您(可能?)能够使用 NSManagedObject,然后您可以将其与核心数据很好地集成。

      请记住,Core Data 是一个对象图,而不是数据库。因此,您可能希望从那方面开始,而不是设计对象然后尝试将它们放入关系数据库中。

      【讨论】:

      • 谢谢,我会看看相反的方法。我刚刚想到的一个想法(懒惰)是简单地使用一些 NSArray。我可以定义 NSArray *index; NSArray *模式; NSArray *counter;
      • 根据您的要求,如果您的数据类型是平面整数(假设模式是枚举),您可以存储 NSNumber,它是一个适当的对象,也可以存储在数组中。不过,我不能 100% 确定您的确切要求。 NSNumber 可以存储 float、long、int(有符号和无符号)。无论如何,Core Data 会将这些值表示为 NSNumber
      • 只是想给您进一步的反馈。我放弃了我原来的方法,决定从 Core Data 对象图设计开始,然后倒退。简而言之:更好的方法。谢谢指点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多