2010-12-05 2 views
4

내가 아이폰 OS의 새로운이야 전송 생산, 그리고 정말 미안 @protocol 구현에 문제가 내가 stackoverflow.com, 웹 주위를 검색하고 잠시 동안 구글 삼촌을 시도하고 여기에 물어보기로 결정했습니다 ...실패 self.delegate를 할당에</p> <p>내가 '.. 그것을 인식 할 수없는 선택기

주요 아이디어는 TopViewController에서 MyViewController를 호출하고 플립 애니메이션을 수행하는 것입니다. 나는 프로토콜 ..

// This is my Delegate header 
    // MyViewController.h 

    @protocol MyViewControllerlDelegate 

    - (void) myViewControllerDidFinish; 

    @end 

    @interface MyViewController : UIViewController 
    { 
    id <MyViewControllerlDelegate> delegate; 
    } 

    @property (nonatomic, assign) id <MyViewControllerlDelegate> delegate; 

    - (IBAction) done; 

    @end 
아래 10

및 구현에 :

내가 개체 이상 사용
// MyViewController.m 

    #import "MyViewController.h" 

    @implementation MyViewController 

    @synthesize delegate; 

    // Another Code above 

    - (IBAction)done 
    { 
    [self.delegate myViewControllerDidFinish]; 
    } 

    // Another Code Below 

    @end 

아래 다른보기에서 호출 그 안에 플립 전환을 추가 할 :

// TopViewController.h 

#import "MyViewController.h" 

@class MapScrollView; 

@interface TopViewController : UIViewController <UIScrollViewDelegate,MyViewControllerlDelegate> 
{ 
    UIScrollView *topScrollView; 
    UIButton *infoButton; 
} 

@end 

TopViewController.h 구현 // TopViewController. m

컴파일러 에러 다음 코드 생산 아래
#import "TopViewController.h" 
#import "CustomScrollView.h" 
#import <QuartzCore/QuartzCore.h> 

- (void)loadView 
{  
    // Step 1: make the outer paging scroll view 
    CGRect topScrollViewRect = [[UIScreen mainScreen] bounds]; 
    topScrollView = [[UIScrollView alloc] initWithFrame:topScrollViewRect]; 
    topScrollView.pagingEnabled = YES; 
    topScrollView.backgroundColor = [UIColor blackColor]; 
    topScrollView.showsVerticalScrollIndicator = NO; 
    topScrollView.showsHorizontalScrollIndicator = NO; 
    topScrollView.contentSize = CGSizeMake(topScrollViewRecte.size.width, 
               topScrollViewRecte.size.height); 
    topScrollView.delegate = self; 
    self.view = pagingScrollView; 

    CustomScrollView *sView = [[[MapScrollView alloc] init] autorelease]; 

    sView.frame = [[UIScreen mainScreen] bounds]; 

    [sView displayTiledMap]; 

    [pagingScrollView addSubview:sView]; 

    // add Info Button 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeInfoDark]; 
    [button addTarget:self action:@selector(infoIsTouch:) forControlEvents:UIControlEventTouchDown]; 
    button.frame = CGRectMake(282.0, 440.0, 18.0, 19.0); 
    [self.view addSubview:button]; 
} 

-(void)infoIsTouch:(id)sender 
{ 
MyViewController *myView = 
[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]]; 
myView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
     // 
     //Here where the code is crash 
     // 
[myView setDelegate:self]; 
     // 
     //Code from here to below is not run... 
     // 
[self presentModalViewController:myView animated:YES]; 
[myView release]; 
} 

- (void) myViewControllerDidFinish 
{ 
[self dismissModalViewControllerAnimated:YES]; 
} 

etc... 

@end 

..

2010-12-06 01:09:07.946 MyViewDelegatePractice[9473:207] -[TopViewController setDelegate:]: unrecognized selector sent to instance 0x5f30fb0 
2010-12-06 01:09:07.949 MyViewDelegatePractice[9473:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TopViewController setDelegate:]: unrecognized selector sent to instance 0x5f30fb0' 
*** Call stack at first throw: 
(
    // Cuts... 
) 
terminate called after throwing an instance of 'NSException' 

내가 전화 infoButton 누를 때 이러한 오류가 발생합니다 - (무효) infoIsTouch (ID) 발송 방법, 다음 [MYVIEW의 setDelegate : 자기]에서 막을 내 실수입니다 줄은 ... 사람이 나에게 힌트를 줄 수 뭐야?

참고 : 내 영어와 혐오 경우 .. 또한 접경 의견을 자유롭게 떨어졌다 ..하지만 그 전에 .. 내가

+0

'MyViewControllerlDelegate' 및'FanglesMapSettingViewControllerDelegate' 중 어느 것을 구현해야합니까? 나는 혼란스러워. – BoltClock

+0

@ sam-ritchie @ sam-ritchie - 감사합니다. sam, 내 오타입니다. 변수를 변경하는 것을 잊었습니다. 죄송합니다. .. – FerryHtw

+0

FanglesMapSettingViewControllerDelegate를 MyViewControllerlDelegate로 변경했지만 여전히 같은 오류가 발생합니다 .. – FerryHtw

답변

2

내 생각 엔 당신이 가지고있다 .. 난 내 최선의 노력했습니다 죄송합니다 myView이라는 다른 변수가 방금 생성 한 MyViewController 인스턴스에 대한 호출을 가로 채고 있습니다. 해당 인스턴스의 이름을 변경해보고 변경 사항을 확인하십시오.

기타 내용 : 구현시 오타가 MyViewController 인 것 같습니다. 이것에

@implementation FanglesMapSettingsViewController 

:이 라인 변경

@implementation MyViewController 

을 그리고 당신은 갈 수 있어야한다. (헤더 파일이 오타 때문에 어떤 구현에도 해당하지 않기 때문에 오류가 발생하므로 @synthesize delegate; 전화의 이익을 얻지 못할 것입니다.

또한 TopViewController에 올바른 프로토콜을 선언했는지 확인하십시오 :

@interface TopViewController : UIViewController <UIScrollViewDelegate, MyViewControllerlDelegate> 

그리고 당신의 프로토콜 선언을 변경합니다.보다

@protocol MyViewControllerlDelegate<NSObject> 

기타 상황이 좋은 찾고

+0

@ sam-ritchie - thanks sam , 그것은 내 오타입니다 .. 변수를 잊어 버렸습니다 .. 죄송합니다 .. – FerryHtw

+0

@ sam-ritchie - 여전히 오류가 있습니다. 제출하기 전에 코드를 수정했는데 여전히 오류가 발생합니다 .. – FerryHtw

+0

Ferry, are are 똑같은 오류가 나고있어? –

3

@synthesize delegate; 어딘가요? 오, 저기있다. Derp.

확인 - 이것은 런타임 오류입니다.컴파일러 경고 등, 저주받을 (내 말은 - 확실히 수정하지만, 컴파일러는 실행 중이고 충돌하는 코드를 생성합니다).

인식 할 수없는 선택기는 해당 개체가 해당 메서드에 응답하지 않는 개체에서 메서드를 호출하려고 시도했음을 의미합니다. 이 경우 백 트레이스는별로 유용하지 않을 수 있습니다. 당신은 이미 충돌 위치를 확인했으며 그것이 충돌하는 이유를 확인했습니다.

충돌하는 행에 중단 점을 설정 한 다음 디버거를 사용하여 해당 객체를 조사하십시오.

po object 
po (id) [object class] 
p (BOOL) [object respondsToSelector: @selector(setDelegate:)] 

... 등 ...

가 진행 가능성이 대단히 분명 뭔가있다,하지만 난 그게 아무 렇게 볼 수 없습니다.

+0

@synthesize delegate; MyViewController.m에 있습니다. –

+0

myView라는 다른 변수가 있어야한다고 생각합니다. 코드는 괜찮아 보이는데, 분명히이 오류를 발생시키는 방식으로 가난하지는 않습니다 ... –

8

이전 게시물이지만 동일한 문제가있는 다른 사용자의 경우 ID 관리자의 클래스를 올바른 클래스로 설정해야합니다. 그건 내 문제 였어. 아마도 Xcode에서 가장 잊혀진 일일 것입니다.

+0

* this * ... 감사합니다. 매우 까다로운 스토리 보드가 있습니다. –

+0

제 경우에는 실수로 클래스를 만들었습니다. 목적지와 같은 계급에서왔다. – mhmdshawqi

관련 문제