2012-01-30 3 views
3

개발자 라이브러리의 도움으로 EventKit 및 EventKitUI 프레임 워크를 사용하려고합니다. 나는 아주 초기 장애물에 부딪쳤다. code from the library found here을 복사하여 붙여 넣었습니다. 내 ViewController에서 Navigation Bar에 'AddEventViewController'라는 뷰 컨트롤러를 추가했으며이 코드를 사용하여 호출합니다.'AddEventViewController'객체에 'delegate'속성이 없습니다.

- (IBAction)add:(id)sender { 
AddEventViewController *addController = [[AddEventViewController alloc] 
              init]; 
addController.delegate = self; 
UINavigationController *navigationController = [[UINavigationController alloc] 
                initWithRootViewController:addController]; 
[self presentViewController:navigationController animated:YES completion: nil]; 

}

오류가 줄에 보여줍니다 addController.delegate = self;

이 코드는 라이브러리에서 바로 복사됩니다. 그게 도움이된다면 Xcode 4.2와 Storyboard를 사용하고 있습니다.

UPDATE : 이 AddEventViewController.h입니다 :

#import <UIKit/UIKit.h> 

@interface AddEventViewController : UIViewController 

@end 

당신은 내가 잘못이의 ViewController를 생성 말해거야? 왜 당신이 그렇게 좋을지 모르겠다는 이유 만 설명하십시오.

+0

'AddEventViewController'는 실제로'delegate' 속성을 가지고 있습니까? 선언을 게시하십시오. – Yuras

답변

4

나는 애플의 예를 여기 가능성이 당신을 혼동하고있다 방법을 참조하십시오. 먼저 iPhoneCoreDataRecipes의 전체 소스를 다운로드하거나 적어도이 코드를 이해하는 동안 참조하십시오.

여기에서 진행되는 작업을 실제로 이해하려면 "발표 된 View Controller 닫기"섹션을 읽은 다음 "위임을 사용하여 다른 컨트롤러와 통신"링크를 따라야합니다. ("대표단?"아주 이상한 ....)

그래서 여기에 있습니다. 제시된 뷰는 "흥미로운"것을 말하기로되어있는 객체 인 "델리게이트"를 가지고 있습니다. 이 경우, "재미있는"것들은 "이봐, 내가 요리법을 추가 했어!" 이를 위해 대리자는 프로토콜을 구현합니다. 이는 일부 메서드를 구현한다는 것을 의미합니다. 이 경우 필요한 방법은 recipeAddViewController:didAddRecipe:입니다.

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

단지 대리인이 명명 된 프로토콜을 준수해야 함을 의미합니다 :

AddViewController이 같은 delegate 속성이 있습니다. 대리인 자체는 그것의 인터페이스에서 그렇게 나타냅니다이 @Yuras는 설명 이유로 assign 표시되어

@interface RecipeListTableViewController : UITableViewController <RecipeAddDelegate, NSFetchedResultsControllerDelegate> { 

하는 것으로.그러나 iOS 5를 대상으로하는 새로운 코드를 작성하는 경우 assign 대신 weak을 사용해야합니다. weak 속성은 참조 된 개체의 할당이 해제되면 nil으로 자동 설정됩니다. 그렇게하면 더 안전합니다. 매달린 포인터가 없습니다.

+0

유라 스에서 정답을 훔쳐 냈습니다 ... 설명 주셔서 감사합니다. –

3

Objective-C에서 사용중인 모든 속성은 어딘가에 선언해야합니다. 부모 클래스 (귀하의 경우 UIViewController)에 선언 된 모든 속성은 모든 파생 클래스 (귀하의 경우 AddEventViewController)에 상속됩니다.

UIViewController을 상속하지만 delegate 속성은 첫 번째 또는 두 번째 중 어느 것도 선언하지 않습니다. 이것이 컴파일러가 행복하지 않은 이유입니다.

선언해야합니다. 다음과 같은 뭔가가 :

@interface AddEventViewController : UIViewController 

@property (nonatomic, assign) id delegate; 

@end 

@implementation AddEventViewController 

@synthesize delegate; 

@end 

대표는 일반적으로 원 유지 방지하기 위해 assign 특성으로 선언되어있다 (예를 들어, AB을 유지하고 BA을 유지)

+1

iOS SDK의'UITableViewController','UITableViewDataSource' 및'UITableViewDelegate'와 관련된 헤더 파일을 읽어 델리게이트로 클래스를 디자인하는 방법을 생각해 보는 것도 좋은 생각입니다. – Yuras

+1

설명해 주셔서 감사합니다. 이제 저는 돌아가서 대표자가 무엇인지 정말로 이해해야합니다. 나는 지난 달 동안 그 교훈을 확실히 "놓쳤다". –