2011-04-20 4 views
3

Objective-C에서 Object 및 mutability에 대해 잘 알고 있다고 생각했지만 NSArray에 궁금한 점이있었습니다.NSArray mutability 및 arrayByAddingObject

나는이 작동하지 않는 다음과 같은 경우 :

NSArray *myArray = [ [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] arrayByAddingObject:myObject ]; 

는 "myObject에"이 결코에 "myArray의"추가되지 않습니다를. 그러나

다음 작품 :

NSArray *someArray = [[NSUserDefaults standardUserDefaults] arrayForKey:someKey]; 
NSArray *myArray = [someArray arrayByAddingObject:myObject]; 

이것에 대한 설명은 무엇입니까? 나는 NSArray가 변경 가능하지 않다는 것을 알고 있지만, 초기 할당 동안이므로, 어느 쪽의 방법도 동등한 것처럼 보이기 때문에 작동해야합니다.

[[NSUserDefaults standardUserDefaults] arrayForKey은 : someKey] [: 개체 NSArray를 arrayByAddingObject]

감사

someArray가있는 NSArray

입니다 그래서,있는 NSArray가에서 간단하게 파생되는있는 NSArray를 반환!

편집 나는 단순히 NSUserDefaults에 다시있는 NSArray를 저장하기 위해 걸려 1

: 나는 "인 myObject"는 것을 결코 것을보고 디버깅 할 때

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:someKey]; 

그것은 너무 제대로 저장하지 않으며, 않았다 배열을 만들 때 추가되었습니다.

참고 : 난 단지와 함께 테스트 된 [[NSUserDefaults standardUserDefaults] arrayForKey : someKey] 빈/전무 배열을 반환

나는이 문제를 조금 격리 한 2

편집; [NSUserDefaults standardUserDefaults] arrayForKey : someKey]가 "nil"을 반환하는 경우에만 발생합니다 (기본적으로 배열은 NSUserDefaults에 없습니다). 내가 가지고있는 두 번째 코드 솔루션의 문제가 아닌 이유는 아직 궁금합니다.

+0

두 표현식이 동일합니다. 정의 "작동하지 않는다"; 즉 테스트 방법의 예제를 붙여 넣습니다. – bbum

+0

할당 후 NSArray를 사용하는 방법에 대한 자세한 내용을 추가했습니다. – aSadhankar

+0

두 표현식은 동일합니다. NSUserDefaults가'nil'을 반환하면,'myArray'는 항상'nil'이됩니다. 그렇지 않은 경우, NSUserDefaults가 'nil'이라고 생각하거나 NSUserDefaults가 nil이 아닌 것으로 생각하거나 모든 코드를 표시하지 않았기 때문에 NSUserDefaults가 nil이 아닌 값을 반환하기 때문입니다. 배열이 이전에 설정된 경우 – bbum

답변

0

myObject이 추가되었는지 어떻게 확인하나요? 두 코드 예제 모두 괜찮아 보입니다. 전자는 문제없이 사용했습니다. 그러나 모든 가정은 정확합니다. 문제가 실제로 존재한다면 문제는 다른 곳에있다. 당신이 목표 - C에서 nil의 메소드를 호출 할 경우 호출 할 때

0

그건 당신은 항상이 경우, 귀하의 반환 값

로 전무를 얻을 수 (또는 NO/0), 예상되는 동작

해야한다 NSArray *myArray = [ [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] arrayByAddingObject:myObject ]; 인 경우 someKeyNSUserDefaults으로 설정되지 않은 경우 [nil arrayByAddingObject:]이 호출되므로 nil이 다시 열리게됩니다.