委托和协议代码不输入委托方法

时间:2013-08-14 02:06:25

标签: ios objective-c delegates protocols

我正在处理用户激活错误,我有一个NSObject类,如果从DB返回错误,则会调用它。

我显示一个alertview,当用户在警报视图上按下UIButton时,该视图会调用一个方法。这就是方法的样子。

// ErrorHandling.m

//
case 1: {
            NSLog(@"ERROR = 1");
            message = [[UIAlertView alloc] initWithTitle:@"Error 1:"
                                                 message:@"The activation request failed."
                                                delegate:self
                                       cancelButtonTitle:@"OK"
                                       otherButtonTitles:nil];

            message.tag = myAlertViewsTag;
            [self performSelector:@selector(showAlertViewAndMessage) withObject:message afterDelay:0.3]; // set timer to give any huds time to load so I can unload them correctly
        }
            break;
//

- (void)showAlertViewAndMessage {
    [SVProgressHUD dismiss];
    [message show];
}

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    if (alertView.tag == myAlertViewsTag) {
        if (buttonIndex == 0) {

                if (receivedResponseData != nil) {

                    if (errorCodeValue == 1) {
                        [[self errorDataDelegate] passErrorDataToRoot:receivedResponseData];
                    }

                    // incase the user is further on in the navigationstack bring them back to the rootview
                    [self.currentNavigationController popToRootViewControllerAnimated:YES];
                }
        }
}

到目前为止所有这些代码都有效,接受代理/协议请求...我已经检查并仔细检查了我的代码,但是我想也许我错过了一些你可以看到的东西。这就是我的代表和协议的样子。

// errorHandling.h

@protocol RecivedErrorData <NSObject>
- (void)passErrorDataToRoot:(NSData *)errorData;
@end

//Protocol/delegate
 __weak id <RecivedErrorData> errorDataDelegate;

//Protocol/delegate
@property (weak, nonatomic) id <RecivedErrorData> errorDataDelegate;

// errorHandling.m

//delegate / protocols
@synthesize errorDataDelegate;

[[self errorDataDelegate] passErrorDataToRoot:receivedResponseData];

// RootViewController.h

#import "ErrorHandling.h"
@interface RootViewController : UIViewController <RecivedErrorData> {
// error handling for activations
ErrorHandling *errorHandling;

// RootViewController.m

-(void)viewDidLoad {
    errorHandling = [[ErrorHandling alloc] init];
    [errorHandling setErrorDataDelegate:self];
}
#pragma ErrorProtocol
- (void)passErrorDataToRoot:(NSData *)errorData {
    NSLog(@"WORKED");
}

这就是我的协议和委托代码,它几乎可以在点击按钮时工作,它从来没有将它转换为 passErrorDataToRoot 委托方法。

我想知道它是否在初始化时出错,ErrorHandling.h最初是在应用程序在rootView内启动时初始化的,然后当我从请求中收到错误时,我从一个名为EngineRequest.m的类中调用ErrorHandling.m分配init等...这是我唯一能想到的,因为这个额外的分配即时处理另一种方法,但我不确定这是什么原因?我认为代理和协议用于避免重新分配这个问题。

0 个答案:

没有答案