没有在另一个视图上获得nsuserdefault值

时间:2011-09-09 11:33:02

标签: iphone objective-c cocoa-touch ios4 nsuserdefaults

在我的应用中,

我在该阵列中有一个数组filterimage,其中有一些图像。 我想在另一个视图上使用该数组数据。

我尝试使用此代码为filterimage设置nsuserdefault。

  NSUserDefaults *userPrefs = [NSUserDefaults standardUserDefaults];
  userPrefs setObject:filterimage forKey:@"FILTERIMAGE"];

使用此代码我尝试在另一页上获取filterimage数组数据。

FBImage = [[NSUserDefaults standardUserDefaults] valueForKey:@"FILTERIMAGE"]; 

FBImage是Array。

但在FBImage中获取null。

当我在我设置用户默认值的地方打印数据时,它会这样给出。

-[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '(
    "<null>",
    "<null>",
    "http://external.ak.fbcdn.net/safe_image.php?d=AQD44bnA250GMrV2&w=90&h=90&url=http%3A%2F%2Fwww.djmag.com%2Fimages%2Ftop100djs%2F2011header.jpg",
    "http://external.ak.fbcdn.net/safe_image.php?d=AQD44bnA250GMrV2&w=90&h=90&url=http%3A%2F%2Fwww.djmag.com%2Fimages%2Ftop100djs%2F2011header.jpg",
    "http://external.ak.fbcdn.net/safe_image.php?d=AQD44bnA250GMrV2&w=90&h=90&url=http%3A%2F%2Fwww.djmag.com%2Fimages%2Ftop100djs%2F2011header.jpg",
    "<null>",
    "<null>",
    "<null>",
    "<null>",
    "<null>"
    )' of class '__NSArrayM'

是这个问题,因为我会在过滤器数组中得到空值吗?

3 个答案:

答案 0 :(得分:1)

我认为它不能解决您的所有问题,但不要忘记在更改后同步您的userDefaults:

[userPrefs synchronize];

答案 1 :(得分:1)

 if ([[NSUserDefaults standardUserDefaults] valueForKey:@"FILTERIMAGE"]==nil)
   {
    [[NSUserDefaults standardUserDefaults] setObject:filterimage forKey:@"FILTERIMAGE"];
    [[NSUserDefaults standardUserDefaults] synchronize];
   }

then you can get where your want using entire application
FBImage = [[NSUserDefaults standardUserDefaults] valueForKey:@"FILTERIMAGE"];

答案 2 :(得分:0)

NSUserDefaults只能包含几种数据类型:BOOL, double, float, NSInteger, NSNumber, NSData, NSString, NSDate, NSArray, NSDictionary, NSURL。对于其他数据类型,然后转换为NSData或NSString。

请注意,许多其他数据类型的转换方法/函数可以转换为NSStrings,包括NSStringFromCGAffineTransform, NSStringFromCGPoint, NSStringFromCGRect, NSStringFromCGSize, NSStringFromRange, NSStringFromUIEdgeInsets, NSStringFromUIOffset及其对应的NSStrings,以便从NSString表示重新创建数据类型。