-1

我有以下用于异步 UrlConnections 的代码。如果请求失败,我将 a 添加 NSStringNSMutableArray保存在NSUserDefaults. 第一次正确添加,但第二次抛出错误:

'NSInternalInconsistencyException',原因:'-[__NSCFArray insertObject:atIndex:]:发送到不可变对象的变异方法

代码是:

[NSURLConnection sendAsynchronousRequest:theRequest queue:mainQueue completionHandler:^(NSURLResponse *response, NSData *responseData, NSError *error) {
        NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)response;
        if (!error) {
           //something
        }
        else {

            NSMutableArray *unprocessedSubscription=[[NSUserDefaults standardUserDefaults]objectForKey:@"unprocessedSubscription"];
            if(unprocessedSubscription==nil)
                unprocessedSubscription=[[NSMutableArray alloc]init];
            NSString * subscriptionToAdd=@"something";
            [unprocessedSubscription addObject:subscriptionToAdd];
            [[NSUserDefaults standardUserDefaults]setObject:unprocessedSubscription forKey:@"unprocessedSubscription"];
            [[NSUserDefaults standardUserDefaults]synchronize];
        }
    }];
4

3 回答 3

2

将返回的 NSArray 复制到 NSMutableArray

NSArray *unprocessedSubscription=[[NSUserDefaults standardUserDefaults]objectForKey:@"unprocessedSubscription"];

NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:unprocessedSubscription]
于 2013-06-04T11:04:13.543 回答
0

基本上返回的值是不可变的,你可以做的是每次创建一个可变数组,如果NSUserDefaults.

NSMutableArray *unprocessedSubscription=[[NSMutableArray alloc]init];
NSArray * storedValues = [NSUserDefaults standardUserDefaults]objectForKey:@"unprocessedSubscription"];
if(storedValues != nil){
[unprocessedSubscription addObjectsFromArray:storedValues];
}
 NSString * subscriptionToAdd=@"something";
 [unprocessedSubscription addObject:subscriptionToAdd];
 [[NSUserDefaults standardUserDefaults]setObject:unprocessedSubscription forKey:@"unprocessedSubscription"];
 [[NSUserDefaults standardUserDefaults]synchronize];
于 2013-06-04T11:08:20.043 回答
0

你可以更换你的

NSMutableArray *unprocessedSubscription=[[NSUserDefaults standardUserDefaults]objectForKey:@"unprocessedSubscription"];

NSMutableArray *unprocessedSubscription=[[[NSUserDefaults standardUserDefaults]objectForKey:@"unprocessedSubscription"] mutableCopy];
于 2013-06-04T11:13:15.993 回答