我如何传递一个“MutableArray全对象”到另一个类使用NSUserDefaults的?(Ho

2019-10-17 15:57发布

我如何传递一个“ MutableArray全对象”到另一个类使用NSUserDefaults ? 我知道如何通过“ MutableArray ” S但这不起作用!

所以;

我有一个MutableArray; “ myCityObjects ”,和我对象来填充它; “ cities ”在每一个“ cities ”的对象有样特性cityNamecityLocation等..

[myCityObjects addObject:cities];

现在,我想做的就是通过这个MutableArray使用“(填充物)到另一个类NSUserDefaults ”;

[[NSUserDefaults standardUserDefaults] setObject: myCityObjects forKey:@"MCO"];

而在其他类,

NSMutableArray *getMyCityObjects = [[NSArray alloc] init];

getMyCityObjects = [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:@"MCO"];

但是,这是行不通的! 我不能让myCityObjects中的其他类,“ getMyCityObjects ”是空的。 我该如何解决呢?

谢谢,E.

Answer 1:

你的阵列是零,因为它(自定义对象)的对象不能被序列化。

请看看NSCoding协议。 如果希望对象序列化(如写入NSUserDefaults的)必须实现的方法-encodeWithCoder:-initWithCoder

我敢肯定,你会发现这是如何比较容易地完成搜索,因为我给你的条件...



Answer 2:

总是NSUserDefaults的返回不可变对象,即使原来的对象是可变的。

在你的第一个视图中,可以像这样保存NSUserDefaults的价值:

NSMutableArray *arr= [NSMutableArray arrayWithObjects:@"asd",@"dsa",nil];
[[NSUserDefaults standardUserDefaults] setObject:arr forKey:@"MCO"];

这在另一个视图后,您可以通过这种方式从检索NSUserDefaults的价值。

NSMutableArray *abc = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"MCO"]];


Answer 3:

我以前也遇到了这个问题。 与所述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];


Answer 4:

你可以在这里做是在你的其他类如创建一个构造

-(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?