2013-08-06 2 views
3

에서 개체를 제거 할 때 나는 viewDidLoad에 초기화 한 NSMutableArray 있습니다 충돌 NSMutableArray를

@property(nonatomic, copy) NSMutableArray* titlesTagArreys; 

나는 하나 개의 항목을 삭제하려고

, 응용 프로그램 :

self.titlesTagArreys = [@[@"Dollar", @"Euro", @"Pound",@"Dollar longString", @"Euro longStringlongString", @"Pound",@"Dollar", @"Euro", @"PoundlongStringlongString"]mutableCopy]; 

.H에를 충돌 :

: 여기

-(void)removeButtonWasPressed:(NSString*)tagTitle{ 
    NSLog(@"tagTitle - %@",tagTitle); 
    NSLog(@"self.titlesTagArreys - %@",self.titlesTagArreys);  
    [self.titlesTagArreys removeObject:tagTitle]; 
} 

로그입니다

2013-08-06 16:15:03.989 EpicTv[6378:907] tagTitle - Dollar 
2013-08-06 16:15:03.991 EpicTv[6378:907] self.titlesTagArreys - (
    Dollar, 
    Euro, 
    Pound, 
    "Dollar longString", 
    "Euro longStringlongString", 
    Pound, 
    Dollar, 
    Euro, 
    PoundlongStringlongString 
) 
[__NSArrayI removeObject:]: unrecognized selector sent to instance 0x1c53bbd0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI removeObject:]: unrecognized selector sent to instance 0x1c53bbd0' 
*** First throw call stack: 
(0x327162a3 0x3a5c197f 0x32719e07 0x32718531 0x3266ff68 0x20ad55 0x20c9a5 0x20bf5d 0x346090c5 0x34609077 0x34609055 0x3460890b 0x34608e01 0x345315f1 0x3451e801 0x3451e11b 0x362295a3 0x362291d3 0x326eb173 0x326eb117 0x326e9f99 0x3265cebd 0x3265cd49 0x362282eb 0x34572301 0xafb89 0xa4d68) 
libc++abi.dylib: terminate called throwing an exception 
+0

'removeObject'가 NSMutableArray에 유효한 함수이기 때문에'NSMutableArray'를 초기화하는 코드를 보여줄 수 있습니까?'unrecognized selector ... '는'titlesTagArreys'가 NSMutableArray가 아니라고 말합니다. 'titlesTagArreys'와 함께 코드를 공유하십시오. – Popeye

+0

@ 루다 NSMutableArray (titlesTagArreys)를 선언하는 방법은 무엇입니까? – DharaParekh

+0

하쿠나'NSMutata'. – dreamlax

답변

6

그것은 titlesTagArray의 목록이 NSMutableArrayremoveObject 때문에 호출 할 수없는 것 같다. 코드에서 NSArray의 앞부분을 titlesTagArreys으로 전달한 것일 수 있습니다.

self.titlesTagArreys = [NSMutableArray arrayWithArray:@[@"...",@"...",...]]; 

@property (비 원자, 복사)와 init 배열에

시도가있는 NSMutableArray 당신의하지 변경할 수 복사본을 만듭니다. 나는 또한 일부 코드의 추가 할

한번에 변경하기 때문에 당신 titlesTagArreys가 변경 가능한 배열이 아니라고 생각

5

대신 사본의 (비 원자 유지) @property 시도 : NSLog(@"%@", NSStringFromClass(self.titlesTagArreys.class));를 사용합니까 어떤 클래스 확인을

-(void)removeButtonWasPressed:(NSString*)tagTitle{ 

    NSLog(@"%@", NSStringFromClass(self.titlesTagArreys.class)); 

    [self.titlesTagArreys removeObject:tagTitle]; 
} 
0

나는 동일한 문제가있어서 가변 배열 속성에 대해 설정자을 무시하고 mutableCopy을 호출해야한다는 것을 알게되었습니다. Stack Overflow here에서 답을 찾을 수 있습니다.

+1

이것은 속성이'copy'로 정의 된 경우에만 해당됩니다. 'strong' (그리고'copy'가 아닌)로 정의 된 경우 setter 메소드를 재정의 할 필요가 없습니다. – rmaddy

0

titlesTagArray는 NSMutableArray가 아닙니다. 로그에 [__NSArrayI removeObject :] 인식 할 수없는 선택기가 인스턴스 0x1c53bbd0으로 전송 된 것을 볼 수 있기 때문입니다. 또한 NSArrayI는 NSArray에 사용되고 NSArrayM은 NSMutableArray에 사용됩니다. 예외이므로 NSArray를 사용하여 mutablearray를 초기화해야합니다.