1

我正在处理用户激活错误,如果从数据库返回错误,我有一个 NSObject 类会被调用。

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

//错误处理.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 内启动时初始化的,然后当我从请求中收到错误时,我使用 alloc init 等从名为 EngineRequest.m 的类中调用 ErrorHandling.m ...这是我唯一能想到的,因为这个额外的分配,我正在处理另一种方法,但我不确定这是不是原因?我认为委托和协议被用来避免这个重新分配的问题。

4

0 回答 0