将NSDictionary添加到NSMutableArray变异方法发送到不可变对象时获取sigarbt

时间:2013-03-26 06:47:15

标签: ios objective-c nsmutablearray nsdictionary

我正在使用此代码中的sigarbt

if (![newPlayerName isEqual:@""] && !thereAreJustSpaces)
    {

        NSDictionary *player = [NSDictionary dictionaryWithObjectsAndKeys:
                                newPlayerName, @"name", @"", @"email", nil];

        [self.playerNames addObject:player];//Getting sigarbt over here.
    }

这是我的控制台输出

2013-03-26 08:44:30.683 ChooseTeams[3921:15203] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
*** First throw call stack:
(0x1655022 0xfcdcd6 0x15fda48 0x15fd9b9 0x164eda8 0x164ecb0 0x43f9 0x1656e99 0x13314e 0x371a0e 0x1656e99 0x13314e 0x1330e6 0x1d9ade 0x1d9fa7 0x1d9266 0x1583c0 0x1585e6 0x13edc4 0x132634 0x17e8ef5 0x1629195 0x158dff2 0x158c8da 0x158bd84 0x158bc9b 0x17e77d8 0x17e788a 0x130626 0x26dd 0x2605 0x1)
terminate called throwing an exception(lldb) 

我有财产

@property (strong, nonatomic) NSMutableArray *playerNames;

并在viewDidLoad

self.playerNames = [[NSMutableArray alloc] init];

4 个答案:

答案 0 :(得分:1)

你在你的例外中回答谎言

2013-03-26 08:44:30.683 ChooseTeams [3921:15203] *由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [__ NSCFArray insertObject:atIndex:]:**发送变异方法到不可变对象'

我认为self.playerNames是 NSArray ,它应该是 NSMutableArray

答案 1 :(得分:0)

你的“玩家姓名”需要是可变的。

示例:

playerNames=[[NSMutableArray alloc]init];

答案 2 :(得分:0)

例外情况可能不是来自您认为的情况。它清楚地表明你正在尝试将一个对象添加到可变的NSArray中,这就是发生的事情。您的可疑playerNames不可变,或者您没有插入playerNames。

您应该开始学习Xcode调试。首先,在Objective-C异常上设置断点。然后,您将看到完全问题发生的位置。接下来,显示存储在playerNames中的值,并在问题发生时检查它是否仍然是同一个数组。

答案 3 :(得分:0)

- (id) init
{
    self = [super init];
    if (self)
    {
        self.playerNames = [NSMutableArray array];
    }
   return self;
}  

其他东西:

newPlayerName = [newPlayerName stringByReplacingOccurrencesOfString:@" " withString:@""];

if (![newPlayerName isEqualToString:@""])
    {

        NSArray *keys = [[NSArray alloc] initwithobjects:@"key1", @"key2",nil];
        NSArray *objects = [[NSArrayAlloc] initwithobjects:@"value1",@"value2",nil];

        NSDictionary *dic = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];

        [self.playerNames addObject:player];//Getting sigarbt over here.
    }