안녕하세요, NSMutableArray의 performSelector로 까다로운 문제가 있습니다. performSelector가하는 일을 오해 한 것일 수 있습니다. 기본적으로 NSMutableArray 개체 (모두 UIButton에서 상속하는 클래스를 기반으로하는 개체입니다.하지만 그것은 중요하지 않습니다.) 그리고 배열의 모든 개체에 메시지를 보내야합니다.performSelector on NSMutableArray 오류
내 클래스의 헤더 파일에서 나는 선택기에 의해 호출되는 함수를 선언했습니다.
-(void)scaleChangedWithANumber:(NSNumber *)scale;
이 예제에서는 my 배열에 3 개의 개체가 포함되어 있습니다.
NSNumber *tmpNumber=[NSNumber numberWithFloat:scale];
ButtonOfElement *tmpButton1=[elementsButtonContainer objectAtIndex:0];
[tmpButton1 performSelector:@selector(scaleChangedWithANumber:) withObject:tmpNumber];
ButtonOfElement *tmpButton2=[elementsButtonContainer objectAtIndex:1];
[tmpButton2 performSelector:@selector(scaleChangedWithANumber:) withObject:tmpNumber];
ButtonOfElement *tmpButton3=[elementsButtonContainer objectAtIndex:2];
[tmpButton3 performSelector:@selector(scaleChangedWithANumber:) withObject:tmpNumber];
을하지만 배열에 performSelector를 호출하려고하면 (내가 배열의 모든 객체에 메시지를 보낼 필요) : 전 항목에 의해 그들에게 항목을 호출하는 경우, 그것은 완벽하게 작동
NSNumber *tmpNumber=[NSNumber numberWithFloat:scale];
[elementsButtonContainer performSelector:@selector(scaleChangedWithANumber:) withObject:tmpNumber];
tmpNumber=nil;
I 오류 얻을 :
[__NSArrayM scaleChangedWithANumber:]: unrecognized selector sent to instance 0x1737f0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM scaleChangedWithANumber:]: unrecognized selector sent to instance 0x1737f0'
*** First throw call stack:
(0x34e456c3 0x370be97f 0x34e49227 0x34e47951 0x34d9f468 0x31d1 0x369a70eb 0x369a7447 0x369324d9 0x368f9c0d 0x36ae5649 0x3681df4f 0x3681c9b3 0x3682791f 0x368274eb 0x36814f29 0x36814843 0x337425d3 0x33742203 0x34e1a593 0x34e1a537 0x34e193b9 0x34d8c39d 0x34d8c229 0x3374131b 0x368688f9 0x2363 0x2308)
libc++abi.dylib: terminate called throwing an exception
나는 물론 항목에서 선택 항목을 수행하는 루프를 사용하고 호출 할 수 있습니다, 그러나 나는 그것을 배열에 performSelector를 사용하는 것이 더 우아하고 명확하게 될 것입니다 생각했다.
:'작품. NSArray에 카테고리를 만들어서 그렇게 할 수는 있지만 C 함수가 태스크에 더 적합하다고 생각할 것입니다. –
As @ RichardJ.RossIII는'performSelector :'는 그런 식으로 작동하지 않는다고 말합니다. '[object performSelector : @selector (someMethod)]'는'[object someMethod]'와 다소 비슷합니다. NSArray에 arbitray 메소드를 호출하면 해당 메소드가 모든 요소로 전달되지 않으므로 충돌이 발생합니다. 쿠비의 대답을보세요, 그는 올바른 생각을 가지고 있습니다. –