我正在处理用户激活错误,我有一个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等...这是我唯一能想到的,因为这个额外的分配即时处理另一种方法,但我不确定这是什么原因?我认为代理和协议用于避免重新分配这个问题。