использование делегата для вызова функции вызывающего ViewController выдает ошибку в iOS 5 - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть UIViewController Class Aplha, который вызывает другой UIViewController Class Beta в modalView.
В Alpha.h, я объявил функцию:

-(void)selectMyImage:(NSString *)myImage;

В Aplha.m:

#import "Beta.h"

-(IBAction)clickMe:(id)sender
{
    Beta *b=[[Beta alloc]initWithNibName:@"Beta" bundle:nil];
    b.delegate=self;
    [self presentModalViewController:b animated:YES];
}

Приведенный выше код показывает ViewCOntroller в модальном виде.У меня есть id delegate;, объявленный в моем Beta.h.Теперь, когда я пытаюсь вызвать функцию Alpha из Beta класса, это дает мне ошибку.
Вот мой код в Beta.m:

 -(void)callAlpha
 {
     [delegate selectMyImage:imagename]; //imagename is declared in Beta.h too.
 }

Xcode показывает красную ошибкуОтметьте высказывание "No known instance method for selector 'mySelectedImage:'"

В iOS 4.x SDK все работает нормально.и здесь у меня включен ARC также.

1 Ответ

1 голос
/ 17 декабря 2011

Это потому что тип id не имеет метода с именем -mySelectedImage:. Обычно для ваших делегатов создается протокол и объявляется делегат следующим протоколом:

// Declared somewhere that both Alpha and Beta can see
@protocol BetaDelegate
- (void)selectMyImage:(NSString*)imageName;
@end

// Alpha.h
@interface Alpha : UIViewController <BetaDelegate>
 // rest of alpha decls
@end

// Beta.h
@interface Beta : UIViewController
@property(nonatomic,weak) id<BetaDelegate> delegate;
  // rest of beta decls
@end

Если это кажется слишком большой работой для чего-то, над чем вы работаете или что-то еще, вы также можете просто специально объявить делегат класса Alpha, тогда компилятор сможет увидеть, что Alpha на самом деле объявляет этот метод.

...