홈>
이 원인을 파악할 수 없습니다. 기본적으로 몇 가지 다른 '작업'이 내 앱에서 서로 충돌합니다. 버튼을 누르면이 코드가 제대로 실행됩니다.
PalAppDelegate *dataCenter = (PalAppDelegate *)[[UIApplication sharedApplication] delegate];
[dataCenter.colourPalettesContainer addObject:[NSNumber numberWithInt:5]];
필요한만큼 여러 번 할 수 있습니다. 그러나 다른 작업을 수행 할 때 (그리고 몇 가지가 발생하면)이 코드와 관련이 있습니다.
PalAppDelegate *dataCenter = (PalAppDelegate *)[[UIApplication sharedApplication] delegate];
[dataCenter.colourPalettesContainer removeObjectAtIndex:touchDownID];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:dataCenter.colourPalettesContainer forKey:@"container"];
[prefs synchronize];
그리고 :
dataCenter.colourPalettesContainer = [prefs objectForKey:@"container"];
이후 첫 번째 코드를 다시 실행하면 "mutating method sent to unmutable object"오류와 함께 충돌이 발생합니다. 이걸 어떻게 막을 수 있습니까?
편집 : 그래서 아래 답변에서 문제를 발견했습니다. 그들이 제안한 다른 방법이 있습니까?
- 답변 # 1
- 답변 # 2
NSUserDefaults
저장된 내용이 변경 가능하더라도 항상 변경 불가능한 객체를 반환합니다. 이 문제를 해결하려면 변경 가능한 사본을 만들어야합니다.-mutableCopy
부터 호출자가 소유 한 객체를 반환하며 (자동) 해제되어야합니다.dataCenter.colourPalettesContainer = [[[prefs objectForKey:@"container"] mutableCopy] autorelease];
(편집) 다른 질문에 대한 응답으로 -mutableDeepCopy NSArray&NSDictionary 메소드를 게시했습니다. 문제가 컬렉션의 더 깊은 중첩과 관련되어 있고 변경이 가능하도록모두필요한 경우 이것이 도움이 될 수 있습니다.
- 답변 # 3
어레이의 특정 색인에서 개체를 제거하려면. (Swift 3.0)
let fullArray : NSArray = Userdefaults().value(forKey: "YOUR_ARRAY_STRING") as! NSArray var mutableArray : [AnyObject] = fullArray as [AnyObject] mutableArray.remove(at: INDEX_TO_REMOVE) //Eg: mutableArray.remove(at: 0) mutableArray.append(ARRAY_TO_APPEND)
관련 자료
- rust - get 메소드가 reqwest에서 Response 객체를 반환하지 않는 이유는 무엇입니까?
- ruby - httpparty 및 nokogiri를 사용하여 "nil - nilclass (nomethoderror)에 대해 정의되지 않은 메서드 'css'가져 오기"
- javascript - map 메서드를 사용하여 평가중인 개체 업데이트
- java - 특수 논리를 사용하는 개체에 대한 Setter 메서드
- class - __add__ 메서드를 올바르게 덮어 쓰고 Python에서 새 개체를 만드는 방법은 무엇입니까?
- javascript - ie-11 - 개체가 속성 또는 메서드 'parseint'를 지원하지 않습니다
- java - 객체 o가 null 인 경우 equals () 메서드에서 false를 반환 할 수 없습니다 내 equals () 구현과 테스트 케이스를 추가했습니다
- 양식을 제출 한 후 django가 (attributeerror - 'str'객체에 'get'속성이 없습니다)
- html - 제출 방법 PHP 삭제를 사용할 때 마지막 행 ID를 얻는 것을 피하는 방법
- [개체 객체] javascript JSON 파일을받는 이유
- javascript - find 메서드에서 중첩 된 개체를 어떻게 참조합니까?
- github - git lfs 파일을 가져올 때 오류 발생 - 개체가 서버에 없습니다 : [404] 개체가 서버에 없습니다
- drupal - 커스텀 컨트롤러의 render () 메소드에서 getTitle () 메소드 뒤에 엔티티 객체 유지
- c++ - 메서드 호출에서 명시 적으로 객체를 참조하는 방법은 무엇입니까?
- javascript - 행 DIV에서 두 번째 맵 메서드를 래핑하려고하지만 예기치 않은 토큰 오류가 계속 발생합니다
- java - Method []에서 객체를 제거하는 방법이 있습니까?
- node.js - nodejs 용 aws sdk - chainabletemporarycredentials 개체에서 자격 증명 가져 오기
- c# - json 객체를 역 직렬화하는 동안 오류가 발생합니다
- java - 다른 클래스에서 get 메서드를 호출 할 때 null 데이터 가져 오기
- "Java 8 Method Reference"객체를 스트림에 전달할 수 있습니까?
관련 질문
- iphone : NSDictionary가 비어 있는지 확인
- 목표 C: 변수가 NSArray 또는 NSMutableArray인지 확인하는 방법
- ios : 탭 막대 컨트롤러 시작 시간 첫 번째 뷰 컨트롤러보기 위치 20px 다운
- iphone : iOS 5.1 에서이 code가 왜 충돌하지 않지만 iOS 6이 아닌가?
- ios : 스토리 보드 실행 파일에서보기에 제약 조건을 추가하려면 어떻게해야합니까?
- ios : UITableView를 위쪽으로 위쪽으로 채우는 방법은 무엇입니까?
- iOS 장치 실제 크기 인치
- 오류 : 인수 목록 너무 길 : 재귀 머리글 확장 /응용 프로그램 /iWork '09 /pages.app/.../contents/resources에 실패했습니다.
- 세부 정보 공개 버튼을 시뮬레이션합니다
- ios : 하위 프로젝트의 상위 프로젝트에서 Cocoapod를 재사용하십시오
NSUserDefaults는 불변 배열을 반환합니다. 백업을로드 할 때 변경 가능한 사본을 만들어야합니다.
NSMutableArray를 저장하기 때문에 어레이 내부에서 약간의 조작을 수행해야 할 수도 있습니다.