繁体   English   中英

在iOS中将NSMutableDictionary添加到NSMutableArray时崩溃?

[英]Crashing while Adding NSMutableDictionary to NSMutableArray in iOS?

我试图将一些数据保存到fire base中,所以格式就像是将内容添加到NSMutableDictionary中,然后将其添加到NSMutableArray中并发送到FireBase。第一次尝试添加第二个内容时它正在工作,随后崩溃信息

2014-12-08 14:36:43.388 ChangeText[1634:576618] -[__NSArrayI addObject:]: unrecognized selector sent to instance 0x17023e580
2014-12-08 14:36:43.392 ChangeText[1634:576618] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI addObject:]: unrecognized selector sent to instance 0x17023e580'
*** First throw call stack:
(0x184db259c 0x1954c00e4 0x184db9664 0x184db6418 0x184cbab6c 0x1000fce74 0x189598d34 0x189581e48 0x1895986d0 0x18959835c 0x1895918b0 0x189564fa8 0x189803f58 0x189563510 0x184d6a9ec 0x184d69c90 0x184d67d40 0x184c950a4 0x18de3f5a4 0x1895ca3c0 0x1000fd7ec 0x195b2ea08)
libc++abi.dylib: terminating with uncaught exception of type NSException

我的密码

查看负荷

  arr=[[NSMutableArray alloc]init];
    Firebase *fire=[[Firebase alloc]initWithUrl:@"http://del.firebaseio.com/users"];
    [fire observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
       // self.status.text=snapshot.value;
        NSLog(@"snapshot%@",snapshot.value);
        arr=[snapshot.value copy];

        NSLog(@"copied%@",arr);


    }];

将值添加到Firebase中的按钮

// arr=[[NSMutableArray alloc]init];

    dict=[[NSMutableDictionary alloc]init];
    [dict setValue:@"test1" forKey:@"username"];
    [dict setValue:@"test2" forKey:@"password"];
    [dict setValue:@"test3" forKey:@"profilepic"];
    [dict setValue:@"test4" forKey:@"profile"];
    [dict setValue:@"test5" forKey:@"details"];
    [arr addObject:dict];
    NSLog(@"added new elements%@",arr);

    Firebase *f=[[Firebase alloc]initWithUrl:@"http://del.firebaseio.com/users"];
    [f setValue:arr ];

我的控制台日志

2014-12-08 14:36:32.017 ChangeText[1634:576618] snapshot(
        {
        details = test5;
        password = test2;
        profile = test4;
        profilepic = test3;
        username = test1;
    }
)
2014-12-08 14:36:32.019 ChangeText[1634:576618] copied(
        {
        details = test5;
        password = test2;
        profile = test4;
        profilepic = test3;
        username = test1;
    }
)
2014-12-08 14:36:43.388 ChangeText[1634:576618] -[__NSArrayI addObject:]: unrecognized selector sent to instance 0x17023e580
2014-12-08 14:36:43.392 ChangeText[1634:576618] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI addObject:]: unrecognized selector sent to instance 0x17023e580'
*** First throw call stack:
(0x184db259c 0x1954c00e4 0x184db9664 0x184db6418 0x184cbab6c 0x1000fce74 0x189598d34 0x189581e48 0x1895986d0 0x18959835c 0x1895918b0 0x189564fa8 0x189803f58 0x189563510 0x184d6a9ec 0x184d69c90 0x184d67d40 0x184c950a4 0x18de3f5a4 0x1895ca3c0 0x1000fd7ec 0x195b2ea08)
libc++abi.dylib: terminating with uncaught exception of type NSException

请帮助我解决此错误

[arr addObject:dict]; 在这种情况下会造成崩溃,因为arr是不可变的。

arr=[snapshot.value copy]; 给您一个不变的对象副本。 您可以尝试

arr=[snapshot.value mutableCopy];

arr = [snapshot.value copy];

上一行将NSArray类型实例分配给您的arr对象。 这就是当您尝试在数组中添加对象时会崩溃的原因,因为当前实例的类型为NSArray ,而不是NSMutableArray 将以上行替换为以下行:

[arr addObjectsFromArray:snapshot.value];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM