我如何传递一个“ MutableArray
全对象”到另一个类使用NSUserDefaults
? 我知道如何通过“ MutableArray
” S但这不起作用!
所以;
我有一个MutableArray; “ myCityObjects
”,和我对象来填充它; “ cities
”在每一个“ cities
”的对象有样特性cityName
, cityLocation
等..
[myCityObjects addObject:cities];
现在,我想做的就是通过这个MutableArray
使用“(填充物)到另一个类NSUserDefaults
”;
[[NSUserDefaults standardUserDefaults] setObject: myCityObjects forKey:@"MCO"];
而在其他类,
NSMutableArray *getMyCityObjects = [[NSArray alloc] init];
getMyCityObjects = [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:@"MCO"];
但是,这是行不通的! 我不能让myCityObjects
中的其他类,“ getMyCityObjects
”是空的。 我该如何解决呢?
谢谢,E.
你的阵列是零,因为它(自定义对象)的对象不能被序列化。
请看看NSCoding协议。 如果希望对象序列化(如写入NSUserDefaults的)必须实现的方法-encodeWithCoder:
和-initWithCoder
。
我敢肯定,你会发现这是如何比较容易地完成搜索,因为我给你的条件...
总是NSUserDefaults的返回不可变对象,即使原来的对象是可变的。
在你的第一个视图中,可以像这样保存NSUserDefaults的价值:
NSMutableArray *arr= [NSMutableArray arrayWithObjects:@"asd",@"dsa",nil];
[[NSUserDefaults standardUserDefaults] setObject:arr forKey:@"MCO"];
这在另一个视图后,您可以通过这种方式从检索NSUserDefaults的价值。
NSMutableArray *abc = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"MCO"]];
我以前也遇到了这个问题。 与所述NSUserDefaults的问题是,它只能包含字符串,数字和布尔值,和数组或词典那些类型的值的。 我的解决方案是通过存储NSDictionaries所有属性要解决这个问题。
在你的“城市”类创建两个类函数(我称之为CITYCLASS):
+(NSDictionary *)dictionaryFromCity:(CityClass *)myCity {
NSDictionary *returnDict = @{@"keyForIntProperty" : myCity.intProperty, @"keyForFloatProperty" : myCity.floatProperty, @"keyForNSStringProperty", myCity.NSStringProperty"};
return returnDict;
}
+(CityClass *)cityFromDictionary:(NSDictionary *)myDict {
CityClass *returnCity = [[CityClass alloc] init];
returnCity.intProperty = [[myDict objectForKey:@"keyForIntProperty"] intValue];
returnCity.floatProperty = [[myDict objectForKey:@"keyForFloatProperty"] floatValue];
returnCity.NSStringProperty = [myDict objectForKey:@"keyForNSStringProperty"];
//any other setup for the CityClass
return returnCity;
}
现在你可以使用新的功能,存储和检索您的对象没有问题:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//store a CityClass object
NSDictionary *storageDict = [CityClass dictionaryFromCity:cityToStore];
[defaults setObject:storageDict forKey:@"keyForCity"];
//retrieve a CityClass object
NSDictionary *retrieveDict = [defaults objectForKey:@"keyForCity"];
CityClass *retrievedCity = [CityClass cityFromDictionary:retrieveDict];
你可以在这里做是在你的其他类如创建一个构造
-(void)initWithArrayOfObject:(NSMutableArray *)arr_OfObjects;
{
arr_SecondClassArrayOfObjects = [[NSMutableArray alloc]initWithArray:arr_OfObjects];
}
从你的第一类发送此数组:
[objOfSecondClass initWithArrayOfObject: myCityObjects];
文章来源: How can I pass a “MutableArray with full of Objects” to another class by using NSUserDefaults?