@selector和返回值

时间:2010-04-21 05:43:58

标签: objective-c iphone

这个想法很容易,我有一个http下载类,这个类必须支持http认证,但它基本上是一个后台线程,所以我想避免直接提示屏幕,我想使用委托方法从类外部请求,如viewController。

但我不知道是否可行,或者我是否必须使用不同的语法。

此类使用此委托协议:

//Updater.h
@protocol Updater <NSObject>
-(NSDictionary *)authRequired;
@optional
-(void)statusUpdate:(NSString *)newStatus;
-(void)downloadProgress:(int)percentage;
@end



@interface Updater : NSThread {
...
}

这是对委托方法的调用:

//Updater.m
// This check always fails :(
if ([self.delegate respondsToSelector:@selector(authRequired:)]) { 
    auth = [delegate authRequired];
}

这是委托方法

的实现
//rootViewController.m
-(NSDictionary *)authRequired;
{
    // TODO: some kind of popup or modal view
    NSMutableDictionary *ret=[[NSMutableDictionary alloc] init]; 
    [ret setObject:@"utente" forKey:@"user"];
    [ret setObject:@"password" forKey:@"pass"];
    return ret;
}

1 个答案:

答案 0 :(得分:1)

if ([self.delegate respondsToSelector:@selector(authRequired:)]) { 

在ObjC中,方法名称中的冒号(:)很重要。这意味着authRequiredauthRequired:是不同的方法。试试这个:

if ([delegate respondsToSelector:@selector(authRequired)]) {