Делегаты в iphone - PullRequest
       21

Делегаты в iphone

1 голос
/ 17 января 2012

Я использую библиотеку пользовательских каландриков Kal, загруженную с github. Я очень хорошо знаю и успешно выполняю, как создать протокол делегата и реализовать его. Но теперь в моем приложении я должен сделать, когда пользователь нажимает на дату, эта дата напрямую отражает мой класс UIViewController. Для этого сценария я использовал @protocol метод делегата, но у меня возникла странная проблема. Пожалуйста, смотрите следующий скриншот и предложите мне, где я не прав enter image description here

enter image description here Затем я синтезирую свой протокол enter image description here

enter image description here

но я получил ошибку ниже. Почему, где я не прав?

Ответы [ 4 ]

0 голосов
/ 18 января 2012

Ха-ха, мне было очень любопытно, почему ты не смог сделать это, поэтому я решил скачать класс сам. Самое смешное, что я не получил никаких проблем.

Вот что я сделал:

(я предполагаю, что вы хотите создать новый протокол для класса KalViewController.h) так что вы добавляете

Сильфон "@Class KalLogic, KalDate;"

@protocol KalViewControllerDelegate <NSObject>

-(void)dateDidSelected:(NSDate *)selectedDate;

@end

затем в тот же заголовочный файл, где объявлены свойства, добавьте:

@property (nonatomic, assign) id<KalViewControllerDelegate> delegate2;

Обратите внимание, что в этом заголовке уже реализован делегат

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

так что вы должны назвать это как-нибудь иначе, чем делегат.

затем в файле реализации этого класса вы синтезируете это имя:

@synthesize dataSource, delegate, initialDate, selectedDate, delegate2;

и тогда вы можете включить делегата туда, куда хотите. Я понятия не имею, что делает этот проект Kal, поэтому я выбрал случайный файл (в данном случае SBJSON.h)

и добавил (в шапке)

@interface SBJSON : SBJsonBase <SBJsonParser, SBJsonWriter, KalViewControllerDelegate> {

и (о реализации)

- (void)dateDidSelected:(NSDate *)selectedDate
{

}

Надеюсь, это поможет, удачи

0 голосов
/ 17 января 2012

Ну, я скачал Kal с github .Прочитав предоставленный пример, мне интересно, как вы встроили Kal в свой проект.

В качестве примера проекта внутри Kal он встроил Kal в проект, как показано на следующем рисунке.И он импортирует заголовок с именем Kal.h в NativeCalAppDelegate.m.Так что может быть что-то не так с настройкой пути поиска заголовка для Kal внутри вашего проекта.Если вы компилируете Kal в статическую библиотеку, как вы будете ссылаться на файлы заголовков Kal?

Kal sample project

Редактировать

Я изменяю пример NativeCal и загружаю все Kal project в эту ссылку , который можно загрузить.

Успешно скомпилировать.Ниже приведены некоторые изображения того, что я изменил.

About KalViewControllerDelegate inside the header The declaration of KalViewControllerDelegate

Declare the implementation of KalViewControllerDelegate enter image description here enter image description here

Редактировать финал

Я наконец выяснил, почему NativeCal может правильно импортировать заголовок.Он сделал настройки после импорта проекта xcode как следующие изображения.enter image description here enter image description here

0 голосов
/ 17 января 2012

Не уверен, поможет ли это, но когда я использовал Kal, я сделал это так:

#import <UIKit/UIKit.h>
#import "SomeOfMyClasses.h"
#import "Kal.h"

@interface SomeRandomViewController : UIViewController<UITableViewDataSource, UITableViewDelegate, KalViewDelegate>

Как видите, я использовал KalViewDelegate, а не KalViewControllerDelegate. Также не забудьте импортировать "Kal.h".

Обновление

Я сделал следующее в моем методе viewDidLoad:

self.kvc = [[KalViewController alloc]init];
self.kvc.delegate = self;
self.kvc.view.frame = CGRectMake(0, 0, 320, 340);

и заголовочный файл:

@property (nonatomic, retain) KalViewController *kvc;
0 голосов
/ 17 января 2012

Вам нужно #import заголовочного файла .h, где вы объявили свой протокол KalViewControllerDelegate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...