2012-11-09 2 views
1

SplitViewControllers 및 프로토콜 사용에 대해 Stanford cs193p lesson 7을 따르고 있습니다. 나는 교수님이하고있는 것과 똑같은 일을하고 있습니다. (여러 번 확인해 봤지만)이 오류는 반복해서 나타납니다. 'id <UISplitViewControllerDelegate>'유형의 개체에서 'splitViewBarButtonItem'속성을 찾을 수 없습니다.

나는 내가 barButtonItem을 설정하려고하면 나중에 CalculatorViewController.m

-(id <UISplitViewControllerDelegate>)splitViewBarButtonItemPresenter 
{ 
    id detailVC = [self.splitViewController.viewControllers lastObject]; 
    if(![detailVC conformsToProtocol:@protocol(SplitViewBarButtonItemPresenter)]){ 
     detailVC = nil; 
    } 
    return detailVC; 
} 

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    super.splitViewController.delegate = self; 
} 

에 CalculatorViewController.h

@interface CalculatorViewController : UIViewController <UISplitViewControllerDelegate> 

내 마스터에

#import <UIKit/UIKit.h> 

@protocol SplitViewBarButtonItemPresenter <NSObject> 
@property (nonatomic,strong) UIBarButtonItem *splitViewBarButtonItem; 
@end 

SplitViewBarButtonItemPresenter.h의 프로토콜을 정의

-(void)splitViewController:(UISplitViewController *)svc 
    willHideViewController:(UIViewController *)aViewController 
     withBarButtonItem:(UIBarButtonItem *)barButtonItem 
     forPopoverController:(UIPopoverController *)pc 
{ 
    barButtonItem.title = self.title; 
    [self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem; 
} 

제대로 프로토콜과 대리자를 선언하지 않은 것처럼 제목에 오류가 계속 발생합니다. 스탠포드 대학의 교수가 줄을 서서히 따르는 편지를 따르고 있기 때문에 어디에서 오류를 찾아야할지 모릅니다. 오류가 특별히,이 라인에있는 모든의

[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem; 
+0

오류에 대한 자세한 내용은 – jimpic

+0

입니다. 점 표기법을 사용하여 splitViewBarButtonItem을 설정하려고하면 오류가 발생합니다. –

답변

1

먼저, 당신은 당신의 코드에서 무한 재귀가 :

-(id <UISplitViewControllerDelegate>)splitViewBarButtonItemPresenter 
{ 
    id detailVC = [self.splitViewController.viewControllers lastObject]; 
    if(![detailVC conformsToProtocol:@protocol(SplitViewBarButtonItemPresenter)]){ 
     detailVC = nil; 
    } 
    return [self splitViewBarButtonItemPresenter] ? UIInterfaceOrientationIsPortrait(UIInterfaceOrientation) : NO; 
} 

방법은 return 문에 자신을 호출 어떠한 중단 조건이 없다 . 둘째, 해당 메서드가 값을 반환하더라도 BOOL을 반환하지만 id<UISplitViewControllerDelegate>을 반환한다고 가정합니다.

셋째, 메서드의 반환 형식이 잘못되었거나 이름이 잘못된 것입니다. SplitViewBarButtonItemPresenter이라는 프로토콜이 있으며 메서드 이름은 splitViewBarButtonItemPresenter입니다. 그래서 이름에서 나는을 반환하지 않을 것입니다. id<SplitViewBarButtonItemPresenter>id<UISplitViewControllerDelegate>이 아닙니다.

마지막으로, SplitViewBarButtonItemPresenter 프로토콜은 CalculatorViewController에 의해 구현되지 않습니다.

코드에 많은 문제가 있으므로 더 자주 확인하는 것이 좋습니다.

+0

대단히 감사합니다! 무한 재귀에 관해서는 여기에 게시하는 것이 엉망이라고 생각합니다. 그냥 'return detailVC'였습니다. 오류의 원인은 'SplitViewBarButtonItem' 메소드의 반환 유형입니다. 방금 ​​프로토콜에 의존하지 않는 것으로 나타났습니다 (다른 뷰는 나중에 SplitViewBarButtonItemPresenter에 대한 대리자로 설정됩니다). obj-c와 iOS에서 아무런 경험이 없지만 질문이 일종의 벙어리 인 경우에도 답변을 주셔서 다시 한번 감사드립니다 :) –

관련 문제