可以在iPhone上使用NSUserDefaults保存整数数组吗?

use*_*293 8 iphone cocoa-touch objective-c

是否可以在iPhone上使用NSUserDefaults保存整数数组?我在我的.h文件中声明了一个数组:int playfield[9][11]它从文件中填充整数并确定游戏场地的布局.我希望能够有几个保存位置,用户可以保存他们的游戏.如果我做:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject: playfield forKey: @"slot1Save"];
Run Code Online (Sandbox Code Playgroud)

我收到指针错误.如果可以保存整数数组,那么最好的方法是什么,然后再检索它?

提前致谢!

epa*_*tel 13

您可以使用NSData包装器保存和检索数组

即(没有错误处理)

保存

NSData *data = [NSData dataWithBytes:&playfield length:sizeof(playfield)];
[prefs setObject:data forKey:@"slot1Save"];
Run Code Online (Sandbox Code Playgroud)

加载

NSData *data = [prefs objectForKey:@"slot1Save"];
memcpy(&playfield, data.bytes, data.length);
Run Code Online (Sandbox Code Playgroud)


e.J*_*mes 7

来自Apple的NSUserDefaults文档:

默认值必须是属性列表,即(或集合的实例组合)的实例:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary.

这就是你得到指针错误的原因.

您有多种选择(按推荐用法排序):

  1. 使用NSArrayNSArrays到存储playField在您的应用程序
  2. 将playField保持为数组int,但在保存之前用数字填充NSArray NSUserDefaults.
  3. 编写自己的子类NSArchiver以在整数数组之间进行转换NSData.