2013-04-29 1 views
-1

어떻게 해결할 수 있습니까? 여기 인스턴스로 전송 된 인식 할 수없는 선택기 0x84b1c20 '- UIVIEW에서 UIViewController로 캐스팅하는 방법

NavigationControllerWithSlider* controller = (NavigationControllerWithSlider*) self.ViewLocations; // ViewLocations ----> subView of ViewController && NavigationControllerWithSlider is a ViewController . 


*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setRightSlidingViewWithSliderImage:length:]: unrecognized selector sent to instance 0x805df60' 
*** First throw call stack: 
(0x1bec012 0x1508e7e 0x1c774bd 0x1bdbbbc 0x1bdb94e 0x19f7c 0x90d1c7 0x90d232 0x90d4da 0x9248e5 0x9249cb 0x924c76 0x924d71 0x92589b 0x925e93 0x925a88 0xb9a6 0xb3e8 0xaf40 0x8db285 0x8db4ed 0x44c5b3 0x1bab376 0x1baae06 0x1b92a82 0x1b91f44 0x1b91e1b 0x1b467e3 0x1b46668 0x82bffc 0x86dd 0x22b5) 
libc++abi.dylib: terminate called throwing an exception 
(lldb) 

내 코드입니다 :

//ViewController.m 

NavigationControllerWithSlider* controller = (NavigationControllerWithSlider*) self.ViewLocations; // ViewLocations ----> subView of ViewController 
    UIImage * img = [UIImage imageNamed: @"open_panel.png"]; 
    UIImage * closeImg = [UIImage imageNamed: @"close_panel.png"]; 

    UIImage * img1 = [UIImage imageWithCGImage:img.CGImage scale:img.scale orientation:UIImageOrientationUpMirrored]; 
    UIImage * closeImg1 = [UIImage imageWithCGImage:closeImg.CGImage scale: closeImg.scale orientation:UIImageOrientationUpMirrored]; 

    [controller setRightSlidingViewWithSliderImage:img1 length:300.0f]; 
    controller.rightSlidingViewControllerId = @"toBeEmbeddedRight"; 
    controller.rightSlidingView.hideSliderImage = closeImg1; 
    controller.rightSlidingView.headPadding = 44.0f; 
    controller.rightSlidingView.trailPadding = 44.0f; 

//NavigationControllerWithSlider.m 

- (void) setRightSlidingViewWithSliderImage: (UIImage*) image length: (CGFloat) length { 
    _rightSlidingView = [[SlidingViewController alloc] initWithPosition: DDSliderPositionRight image: image length: length]; 
    _rightSlidingViewControllerId = @""; 
} 

내가 여기없는거야 ..? 어떤 도움이 plz ....

+0

컴파일러 경고 메시지가 표시됩니다. –

+1

문제는 self.ViewLocations가 메서드를 구현하지 않는 UIView를 반환한다는 것입니다. 어쩌면 self.navigationController를 대신 사용해야합니다. (이 뷰 컨트롤러의 네비게이션 컨트롤러로 NavigationControllerWithSlider 클래스를 사용한다고 가정) –

+0

@Ishank No ... 런타임에만 예외가 발생합니다. –

답변

1

그래서, 당신은 클라이언트 뷰 컨트롤러에 명시 적으로 NavigationControllerWithSlider의 인스턴스를 설정해야합니다 (또는 우리가 self.ViewLocations는 다음과 같이 선언 알려주세요). 이를 수행하려면 다음과 같은 방법을 사용하십시오.

@interface NavigationControllerWithSlider : UINavigationController 

// some custom interface 
// .. 

- (void)setRightSlidingViewWithSliderImage:(UIImage *)image length:(CGFloat)length; 

@end 

// this is the main controller with strong property of NavigationControllerWithSlider instance 
@interface MainRootViewController 

@property (nonatomic, strong) NavigationControllerWithSlider *sliderController; 

@end 

@implementation MainRootViewController 

- (id)init { 
    self = [super init]; 
    if (self) { 
     _sliderController = [NavigationControllerWithSlider new]; 
    } 

    return self; 
} 

- (void)presentPopup { 
    SomeController *newControllerForPopup = [[SomeController alloc] init]; 
    newControllerForPopup.sliderController = self.slider; 

    // present controller and use slider^that you've set here explicitly 
} 

@end 

// here is an example of using and declaring of public property 
@interface SomeController : UIViewController 

@property (nonatomic, weak) NavigationControllerWithSlider *sliderController; 

@end 

@implementation SomeController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // do some additional view configuration using self.sliderController 
} 

@end 
+0

답해 주셔서 감사합니다. 모든 것은 괜찮습니다. 그러나 "@implementation NSObject (SomeCustomCategoryOrSomeOtherPlace)" ""를 얻지 못했습니다. " 수 plz 그것을 정교합니다. –

+0

더 명확하게하기 위해이 부분을 확장했습니다 –

+1

답해 주셔서 감사합니다 ... –

1

당신은 개체를 NavigationControllerWithSlider으로 캐스팅하고 있지만 내 생각 엔 그 개체는 실제로 NavigationControllerWithSlider이 아닙니다. 위

NSLog(@"Class of controller: %@", NSStringFromClass([controller class])); 

setRightSlidingViewWithSliderImage를 호출에 로그를 추가 할 수

+0

1.0 [1954 : c07] 컨트롤러 클래스 : UIView. 그래 네가 맞아 . 그렇지 않으면 내가 성취하기 위해 여기서 할 수있다. –

+0

난 그냥 내 하위보기에 대한 팝업() 슬라이더를 추가하려고합니다. 그래서 어떻게 그것을 달성 할 수 ... –

+0

당신은이 컨트롤러에 액세스하려는 장소에 "클라이언트 뷰 컨트롤러"에 "NavigationControllerWithSlider"유형의 명시 적 속성을 설정해야합니다. 그러면 NavigationControllerWithSlider 인스턴스에 대한 액세스 권한을 얻게됩니다. 바로 지금 self.ViewLocations에 UIView 인스턴스가 있기 때문에 예외가 throw됩니다. –

관련 문제