2013-06-04 5 views
-1

다음과 같은 비동기 UrlConnections 코드가 있습니다. 요청이 실패하면 NSUserDefaults에 저장된 NSMutableArrayNSString을 추가합니다. 처음 올바르게 추가,하지만 두 번째 번 오류가 발생합니다 :비동기 UrlConnections와 함께 NSUserDefaults를 사용하여 예기치 않은 동작이 발생했습니다.

'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object

코드는입니다 :

[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 * [email protected]"something"; 
      [unprocessedSubscription addObject:subscriptionToAdd]; 
      [[NSUserDefaults standardUserDefaults]setObject:unprocessedSubscription forKey:@"unprocessedSubscription"]; 
      [[NSUserDefaults standardUserDefaults]synchronize]; 
     } 
    }]; 
+0

에 왜 내려 투표? 나는이 웹 사이트를 처음 사용하며 여기에 질문을 게시 할 때 이유를 알려 주어 질문을 향상시킬 수 있습니다. – user2412870

답변

2

있는 NSMutableArray

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

NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:unprocessedSubscription] 
로 복귀 복사 NSArray를
+1

캐스트는 아무런 효과가 없습니다. – omz

+1

남자가 작동하지 않았다 – user2412870

+0

나는 그것을 편집했다, 지금 작동해야한다 –

0

기본적으로 반환 값은 변경할 수 없으므로 매번 변경 가능한 배열을 만들고 ar이 있으면 객체를 추가하는 것이 좋습니다. e는 이미 NSUserDefaults에 저장된 값입니다.

NSMutableArray *unprocessedSubscription=[[NSMutableArray alloc]init]; 
NSArray * storedValues = [NSUserDefaults standardUserDefaults]objectForKey:@"unprocessedSubscription"]; 
if(storedValues != nil){ 
[unprocessedSubscription addObjectsFromArray:storedValues]; 
} 
NSString * [email protected]"something"; 
[unprocessedSubscription addObject:subscriptionToAdd]; 
[[NSUserDefaults standardUserDefaults]setObject:unprocessedSubscription forKey:@"unprocessedSubscription"]; 
[[NSUserDefaults standardUserDefaults]synchronize]; 
0

당신은 대체 할 수

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

NSMutableArray *unprocessedSubscription=[[[NSUserDefaults standardUserDefaults]objectForKey:@"unprocessedSubscription"] mutableCopy]; 
관련 문제