1

如何通过使用将“MutableArray充满对象”传递给另一个类NSUserDefaults?我知道如何通过“ 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。

4

4 回答 4

3

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

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

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

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

NSMutableArray *abc = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"MCO"]];
于 2013-01-29T05:26:20.430 回答
2

您的数组为零,因为其中的对象(您的自定义对象)无法序列化。

请看一下 NSCoding 协议。您想要序列化的对象(例如,用于写入 NSUserDefaults)必须实现方法-encodeWithCoder:-initWithCoder.

我相信你会发现搜索我给你的术语很容易做到这一点......

于 2013-01-29T05:51:27.627 回答
1

我以前遇到过这个问题。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];
于 2013-01-29T05:40:52.907 回答
0

您可以在这里做的是在您的其他类中创建一个构造函数,例如

-(void)initWithArrayOfObject:(NSMutableArray *)arr_OfObjects;
{
    arr_SecondClassArrayOfObjects = [[NSMutableArray alloc]initWithArray:arr_OfObjects];

}

从你的第一堂课发送这个数组:

[objOfSecondClass initWithArrayOfObject: myCityObjects];
于 2013-01-29T05:13:53.080 回答