【问题标题】:'Program received signal: SIGABRT' when inserting object to NSMutableArray将对象插入 NSMutableArray 时出现“程序接收信号:SIGABRT”
【发布时间】:2011-10-18 21:54:49
【问题描述】:

当我尝试将一个对象插入我的 NSMutableArray 时,我收到“程序接收信号:SIGABRT”错误,但我不明白为什么。

这是我的代码,特别是导致错误的insertObject:value

NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary];
[myDictionary setValue:valueName.text forKey:kValueName];
[myDictionary setObject:subValuesList forKey:kSubValuesList];

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
int position = appDelegate.position;

NSMutableArray *valuesList = [[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray];
[valuesList insertObject:myDictionary atIndex:position];

【问题讨论】:

    标签: iphone objective-c nsmutablearray sigabrt


    【解决方案1】:

    NSUserDefaults 返回的值是不可变的,即使您将可变对象设置为值。

    NSUserDefaults 检索数组后,您需要创建一个可变副本。幸运的是,NSArray 符合 NSMutableCopying 协议,因此您只需向数组发送 mutableCopy 消息:

    NSMutableArray *valuesList = [[[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray] mutableCopy];
    

    请记住,根据Memory Management Rules,您拥有mutableCopy 返回的对象。换句话说,你需要在完成后释放它。

    【讨论】:

      【解决方案2】:

      您必须使用 NSData 保存和检索数组。可能重复。

      Possible to save an integer array using NSUserDefaults on iPhone?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 2011-12-26
        相关资源
        最近更新 更多