【问题标题】:Crash interacting with NSUserDefaults and NSArray与 NSUserDefaults 和 NSArray 交互时崩溃
【发布时间】:2019-07-17 05:51:31
【问题描述】:

我有一个NSMutableArray,我在其中添加目标并存储在用户默认值中,但添加时会崩溃。

 if ([[NSUserDefaults standardUserDefaults] objectForKey:@"bssidObserverArray"]) {
        bssidObserverArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"bssidObserverArray"];
    }

   if (bssidObserverArray.count > 0) {
        if (![bssidObserverArray containsObject:vendorID]) {
            NSLog(@"bssidObserverArray %@",bssidObserverArray);
            // In this line app is getting crashed
                [bssidObserverArray addObject:vendorID];
                [[NSUserDefaults standardUserDefaults] setObject:bssidObserverArray forKey:@"bssidObserverArray"];

        }
    }else{
        [bssidObserverArray addObject:vendorID];
        [[NSUserDefaults standardUserDefaults] setObject:bssidObserverArray forKey:@"bssidObserverArray"];
    }

任何建议都会更有帮助。

【问题讨论】:

  • 要存储数组,您需要先将其归档,然后存储在 UserDefaults 中。在检索该数组时还需要取消归档。
  • @AshishGupta 如果数组包含非属性列表值,您只需要存档/取消存档。
  • @zack 显示调试控制台中显示的完整错误消息。

标签: ios objective-c crash nsmutablearray


【解决方案1】:

假设bssidObserverArray 是 NSMutable 数组,那么问题就来了。

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"bssidObserverArray"]) {
        bssidObserverArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"bssidObserverArray"];
    }

因为 NSUserdefaults 返回不可变。你可以这样做

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"bssidObserverArray"]) {
        NSArray *someArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"bssidObserverArray"];
        bssidObserverArray = [someArray mutableCopy];

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多