我最近一直试图将我的iPhone应用程序的搜索结果存储在NSUserDefaults集合中.我也使用它来成功保存用户注册信息,但由于某种原因,尝试存储我的自定义位置类的NSMutableArray总是返回空.
我尝试将NSMutableArray转换为NSData元素,但是我得到了相同的结果(可以在iPhone上使用NSUserDefaults保存整数数组吗?)
我试过的代码示例是:
保存:
[prefs setObject:results forKey:@"lastResults"];
[prefs synchronize];
Run Code Online (Sandbox Code Playgroud)
要么
NSData *data = [NSData dataWithBytes:&results length:sizeof(results)];
[prefs setObject:data forKey:@"lastResults"];
Run Code Online (Sandbox Code Playgroud)
要么
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:results];
[prefs setObject:data forKey:@"lastResults"];
Run Code Online (Sandbox Code Playgroud)
加载:
lastResults = (NSMutableArray *)[prefs objectForKey:@"lastResults"];
Run Code Online (Sandbox Code Playgroud)
要么
NSData *data = [prefs objectForKey:@"lastResults"];
memcpy(&lastResults, data.bytes, data.length);
Run Code Online (Sandbox Code Playgroud)
要么
NSData *data = [prefs objectForKey:@"lastResults"];
lastResults = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Run Code Online (Sandbox Code Playgroud)
按照下面的建议后,我也在我的对象中实现了NSCoder(忽略过度使用NSString的临时性):
#import "Location.h"
@implementation Location
@synthesize locationId;
@synthesize companyName;
@synthesize addressLine1;
@synthesize addressLine2;
@synthesize city;
@synthesize postcode;
@synthesize telephoneNumber;
@synthesize description;
@synthesize rating;
@synthesize priceGuide; …Run Code Online (Sandbox Code Playgroud) cocoa-touch ×1