我正在处理用户激活错误,如果从数据库返回错误,我有一个 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 ...这是我唯一能想到的,因为这个额外的分配,我正在处理另一种方法,但我不确定这是不是原因?我认为委托和协议被用来避免这个重新分配的问题。