setObject为所有键设置相同的对象

时间:2014-03-15 11:28:10

标签: ios objective-c

我是Objective C编程的新手,所以请耐心等待。我在AppDelegate类中有NSMutableDictionary,我在很少的视图控制器中共享。在一个视图控制器中,我有一个方法,我将数据添加到NSMutableDictionary中,它似乎工作正常,直到我添加另一个对象...当我添加另一个对象时,它为所有键设置相同的对象。我的代码是这样的:

AppDelegate.h

@property (strong, nonatomic) NSMutableDictionary *myArray;
@synthesize myArray;

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    myArray = [[NSMutableDictionary alloc]init];
    return YES;
}

ViewController.m

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSMutableDictionary *myArrayFromAppDelegate = appDelegate.myArray;

// i'm using keys as strings so i need to convert int to string
NSString *key = [NSString stringWithFormat:@"%d", currentCuestion];
[myArrayFromAppDelegate setObject:_tempAnswers forKey:key];
[_tempAnswers removeAllObjects];

我已经使用NSLog检查了所有值,一切似乎都很好,但由于某种原因,它为所有键添加了相同的对象,但不是我们指定的对象。我哪里出错了?

1 个答案:

答案 0 :(得分:1)

[myArrayFromAppDelegate setObject:_tempAnswers forKey:key];

引用存储到myArrayFromAppDelegate中的字典中。因此,如果你 稍后修改_tempAnswers,字典中的所有引用都会受到影响。

为每个密钥创建单独的_tempAnswers,或者存储副本:

[myArrayFromAppDelegate setObject:[_tempAnswers copy] forKey:key];