2012-01-25 4 views
0

에 복사 할 수 없습니다.이 사이트와 다른 사이트에서 배열을 복사하는 데 관련된 수많은 질문을 읽었지 만 현재 가지고있는 문제를 직접 해결하지 못했습니다.NSMutableArray를 속성

I 선언 합성했다라는 속성 arrXTurbulenceValues ​​:

@property (weak, nonatomic) NSArray *arrXTurbulenceValues; 

@synthesize arrXTurbulenceValues; 

I는() 메소드의 viewDidLoad의 어레이를 초기화하고 : 일부 처리를 값으로하는 방법으로 발생

self.arrXTurbulenceValues = [[NSArray alloc] init]; 

NSMutableArray에 저장됩니다.

   self.arrXTurbulenceValues = [[NSMutableArray alloc] initWithArray:tempXvalues copyItems:YES]; 

복사가 실패하고 self.arrXTurbulenceValues는 전무 남아 : 그 처리의 끝에서, 나는이 코드를 통해 깊은 사본 NSArray를 속성에있는 NSMutableArray에 노력하고 있습니다. 복사하려고하는 tempXvalues ​​배열에 1900 개 이상의 NSString 객체가 들어 있습니다.

내가 뭘 잘못하고 있니? ViewDidLoad()에서 초기화하지 않고 &으로 복사 코드를 시도했으며 NSArray 및 NSMutableArray로 속성을 구성 해 보았습니다.

NSString이 NSCopying에 응답합니까? 내가 올바르게 문서를 읽는 중이라면 나타납니다.

목표 C와 결합 된 iOS 환경은 악몽입니다. 나는 정말 까다 롭고 다루기 힘든 것을 본 적이 없다. 응.

답변

2

당신은 ARC에서 실행된다고 가정하는 "강력한"에 "약한"를 변경 시도 :

@property (weak, nonatomic) NSArray *arrXTurbulenceValues; 

로 :

@property (strong, nonatomic) NSArray *arrXTurbulenceValues; 

당신의 -viewDidLoad 방법의 끝에서,이 배열에 대한 더 이상 강력한 참조가 아니며 할당을 해제합니다 (약한 참조를 모두 제거하지 않음).

+0

OMG, 감사합니다. 나는 약한/강한 각을 고려하지 않았다. 나는 머리카락을 찢을 준비를하고 있었다. 대단히 감사합니다. – NightStalker

+1

일반적으로 변수에 "strong"을 사용합니다. "weak"은 일반적으로 강한 참조주기를 피하기 위해 "backpointers"에 사용됩니다. 객체 소유 그래프에서는 일반적으로 객체 아래에있는 객체를 소유하는 최상위 레벨에 객체를 가지고 있습니다 (강하게). 다른 방향으로 갈 필요가있을 때 약한 참조를 사용합니다. (예시 소유권 그래프 : https://github.com/musictheory/SwiffCore/wiki/classes.png, 실선 화살표는 강한 참조, 빈 화살표는 약함). – iccir

+0

@NightStalker, 귀하의 질문에 답변이 있으면 동의해야합니다. – paxdiablo