我知道有一个非常简单的问题,但几个小时我不能这样做。
我有两节课: 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;
}
答案 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}}。