为什么我似乎无法取消归档由OS X应用程序归档的iPhone应用程序中的对象?

时间:2009-07-05 15:29:20

标签: iphone objective-c cocoa cocoa-touch

我正在编写一个主要以网格模式为中心的iPhone应用程序,因此我有一个Pattern类,其中包含NSMutableArray的NSMutableArrays。这个类实现了NSCoding,看起来下面的代码在我的iPhone应用程序中运行得很好:

GridPattern * pattern = [GridPattern patternWithWidth:8 height:8];
[pattern setValueAtColumn:0 row:7 value:1];
[NSKeyedArchiver archiveRootObject:pattern toFile:@"test.pat"];
pattern = [NSKeyedUnarchiver unarchiveObjectWithFile:@"test.pat"];

如果我调试上面的代码,我在步骤4之后发现,我有一个GridPattern对象,其中为第0行第7行设置了适当的值。

我还编写了一个Cocoa OSX应用程序,用于为iPhone应用程序创建模式,该应用程序也使用相同的GridPattern类。它还可以成功加载和保存模式。

我想做的是:

  • 在OS X应用程序中创建并保存模式

    1. 将模式文件添加到XCode中的资源组中,用于iPhone应用程序; (我将其添加为test.pat
    2. 使用以下代码解压缩我的iPhone应用中的模式:
    3. pattern = [NSKeyedUnarchiver unarchiveObjectWithFile:@"test.pat"];

但是,当我尝试从该文件中取消归档对象时,返回的所有内容都是nil。我以为我可能有错误的文件路径,并尝试@"Resources/test.pat"无济于事。

我只是错误地提到该文件?或者归档对象根本不是跨平台的?这整个方法是完全错误的吗?如果是这样,你会怎么做?

2 个答案:

答案 0 :(得分:5)

我不知道跨平台存档的兼容性,但是要引用捆绑资源,您应该始终使用NSBundle来查找它。不要依赖当前的路径。

答案 1 :(得分:1)

由于您的模型只是一个数组数组,因此您可以使用跨结构体工作的XML属性列表。