这个想法很容易,我有一个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;
}
答案 0 :(得分:1)
if ([self.delegate respondsToSelector:@selector(authRequired:)]) {
在ObjC中,方法名称中的冒号(:
)很重要。这意味着authRequired
和authRequired:
是不同的方法。试试这个:
if ([delegate respondsToSelector:@selector(authRequired)]) {