2009-07-05 25 views
2

我正在写一个主要以网格模式为中心的iPhone应用程序,所以我有一个包含NSMutableArray的NSMutableArray的Pattern类。这个类实现NSCoding,似乎下面的代码只是正常工作在我的iPhone应用程序:为什么我看起来不能在由OS X应用程序归档的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应用程序

  • 添加格式文件到资源组中的XCode为iPhone应用程序; (我增加一条,作为test.pat
  • 解除封存在我的iPhone应用程序的模式,使用如下代码:
  • pattern = [NSKeyedUnarchiver unarchiveObjectWithFile:@"test.pat"];

然而,当我尝试从这个文件解档的对象,所有返回的是nil。我以为我可能有文件路径错误,也试图@"Resources/test.pat"无济于事。

我只是简单地引用文件不正确?或者存档的对象根本不是跨平台的?这整个方法是错误的吗?如果是这样,你会怎么做?

回答

5

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

+1

谢谢,查克!你击中了要害。所以对于那些好奇的人来说,存档对象似乎在跨平台上工作。我使用了以下工作的代码: pattern = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@“test”ofType:@“pat”]]; – SamCee 2009-07-05 15:42:08

1

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

+0

我这样做(在OS X上保存属性列表,并在iPhone上阅读)在我的一个应用程序中。 – 2009-07-05 23:34:56