Ios 如何在数组中保存自定义对象并将其存储在NSUserDefaults-iPhone中
我在按钮操作方法之后获得自定义类对象。现在我需要将多个自定义对象存储在Ios 如何在数组中保存自定义对象并将其存储在NSUserDefaults-iPhone中,ios,objective-c,arrays,nsuserdefaults,Ios,Objective C,Arrays,Nsuserdefaults,我在按钮操作方法之后获得自定义类对象。现在我需要将多个自定义对象存储在NSMutableArray中,然后将此数组存储在NSUserDefaults中 这是我的密码: -(IBAction)onClickSubmitLater:(id)sender { //Saving store in user defaults for later upload data. NSMutableArray *arrayStoreList = [[NSMutableArray alloc] in
NSMutableArray
中,然后将此数组存储在NSUserDefaults
中
这是我的密码:
-(IBAction)onClickSubmitLater:(id)sender
{
//Saving store in user defaults for later upload data.
NSMutableArray *arrayStoreList = [[NSMutableArray alloc] init];
arrayStoreList = [Util getArrayPreference:@"Store"];//arrayStoreList is the list of all stores.
Store *store = [[Store alloc] init];
store = [arrayStoreList objectAtIndex:self.selectedStoreIndex];//here i am getting particular store that i need to save in array.
//archive
NSData *dataStore = [NSKeyedArchiver archivedDataWithRootObject:store];
[[NSUserDefaults standardUserDefaults] setObject:dataStore forKey:@"resultStore"];
//unarchive
NSData *dataResultStore = [[NSUserDefaults standardUserDefaults] objectForKey:@"resultStore"];
Store *resultStore = (Store *)[NSKeyedUnarchiver unarchiveObjectWithData:dataResultStore];
NSLog(@"%@", resultStore);
}
使用上述代码,它将单个自定义类存储对象保存在NSUserDefaults
中。因此,我希望在提交以后的iAction后,将所有存储
对象保存在NSMutableArray
中。稍后,我将获取存储阵列,以便在服务器上逐个上载存储
谢谢。这两种方法主要用于存储
和检索
自定义对象的属性
- (void)encodeWithCoder:(NSCoder *)encoder ;
- (id)initWithCoder:(NSCoder *)decoder;
看看@chrissr's、@Brad Larson's您需要通过实现NSCoding
协议对其进行归档。然后您可以将其写入任何文件
在模型中实现以下方法:
- (void) encodeWithCoder : (NSCoder *)encode ;
- (id) initWithCoder : (NSCoder *)decode;
正如您所说,您已经在类中实现了这一点,现在需要保存数组
要保存和读取数组,需要使用:
[[NSUserDefaults standardUserDefaults] setObject:yourMutableArray forKey:@"keyForArray"];
NSMutableArray *array = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"keyForArray"]];
要使用用户默认值存储和检索具有自定义对象的数组,可以使用以下方法:
-(void)writeArrayWithCustomObjToUserDefaults:(NSString *)keyName withArray:(NSMutableArray *)myArray
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[defaults setObject:data forKey:keyName];
[defaults synchronize];
}
-(NSArray *)readArrayWithCustomObjFromUserDefaults:(NSString*)keyName
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:keyName];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[defaults synchronize];
return myArray;
}
但是要确保你已经实现了
- (void) encodeWithCoder : (NSCoder *)encode ;
- (id) initWithCoder : (NSCoder *)decode;
数据模型类中避免崩溃的方法,如下所示:
- (void)encodeWithCoder:(NSCoder *)coder;
{
[coder encodeObject:label forKey:@"label"];
[coder encodeInteger:numberID forKey:@"numberID"];
}
- (id)initWithCoder:(NSCoder *)coder;
{
self = [super init];
if (self != nil)
{
label = [[coder decodeObjectForKey:@"label"] retain];
numberID = [[coder decodeIntegerForKey:@"numberID"] retain];
}
return self;
}
谢谢mani,我已经在store entity类中实现了上述NSCoding方法。如果这些注释对您有所帮助,请为访客的注意打勾或投票正确@mani,但我的问题是将所有存储对象保存在NSMutableArray中。使用上面的代码,我在Userdefaults中保存了一个类对象。像这样,首先我需要将所有存储添加到一个数组中,然后将该数组存储在userdefault中。你看到@Brad Larson的答案了吗?我添加了链接?老兄,你说你使用了他的代码来实现上述方法,你必须表示尊重并放弃投票权。+1然后是什么问题?谢谢你。这里使用我上面的代码,我只存储Userdefaults中的一个存储对象“resultStore”。但我需要在这里创建一个数组,然后在其中存储所有的存储对象。所以你的问题是处理数组?检查我编辑的回答它正在显示[NSUserDefaults setObject:forKey:]:尝试在控制台中插入类“\uu NSArrayM”的非属性值“(”)。-(void)encodeWithCoder:(NSCoder*)encode;-(id)initWithCoder:(NSCoder*)解码;我已经实现了店内实体。为什么使用downvote?NSUserDefaults用于存储首选项,因此请向自己提出以下问题:“是否有必要使用NSUserDefaults”?还有许多其他的选项来持久化数据,比如存储为plist、使用编码器和解码器等。有一个由nick lockwood编写的漂亮的可重用类,请看。我建议你用它。谢谢是的,根据我的要求,我必须使用userDefaults。从Xcode停止应用程序后。它将保持不变。感谢您的帮助,也感谢您避免崩溃。@AbdullahMd.Zubair我必须在代码中的任何地方使用encodeWithCoder
和initWithCoder
吗?您必须实现,否则将无法工作!但是你没有在任何地方使用!事实上,我没有得到这个,你必须为你的模型实现它