如何在这里使用代表?我无法让它发挥作用

时间:2014-01-18 08:15:27

标签: uiviewcontroller ios7 delegates

我知道有一个非常简单的问题,但几个小时我不能这样做。

我有两节课: 1. LoginViewController:UIViewController 2. WebRequests:NSObject - 它发出请求并从服务器(单例)获得响应

然后我得到了回复我想从WebRequests在LoginViewController中运行MyMethod。

我这样做,但不起作用:

WebRequests.h

@protocol WebRequestsDelagate <NSObject>
@required
- (void) MyMethod;
@end

@interface WebRequests : NSObject
...
@property (nonatomic, weak) id <WebRequestsDelagate> delegate;

WebRequests.m

@implementation WebRequests

//singleton
 + (WebRequests *)sharedInstance {
 static dispatch_once_t p = 0;
__strong static id _sharedObject = nil;

dispatch_once(&p, ^{
    _sharedObject = [[self alloc] init];
});

return _sharedObject;
}

- (id)init {
if (self = [super init]) {
    LoginViewController * loginViewController = [[LoginViewController alloc] init];
     self.delegate = loginViewController;
}
return self;
}

- (void) someMethod {
//here I got response
[self.delegate runThisMethod];

我不会在LoginViewController中的runThisMethod中继续前进。

为什么不起作用?

更新

@implementation LoginViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}

// AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

return YES;
}

2 个答案:

答案 0 :(得分:1)

如果那是您真正的代码,那么loginViewController方法中创建的[WebRequests init]将在if语句的末尾被销毁(即相当多)直接):

- (id)init {
    if (self = [super init]) {
        LoginViewController * loginViewController = [[LoginViewController alloc] init];
        self.delegate = loginViewController;
    }
    return self;
}

我不明白为什么要在这个方法中创建视图控制器;在这个类之外创建视图控制器(通过任何方法)更为正常,然后将其注册为WebRequests对象的委托。

答案 1 :(得分:0)

好吧,我对你的代码感到有些困惑,但也许你正在寻找像

这样的东西
WebRequests *webRequests = [WebRequests sharedInstance];
webRequests.delegate = self;

可能在LoginController的{​​{1}}。