DB からエラーが返された場合に呼び出される NSObject クラスがあります。
ユーザーがアラート ビューで 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内で起動したときに最初に初期化され、リクエストからエラーが発生すると、alloc initなどを使用してEngineRequest.mというクラスからErrorHandling.mを呼び出します...私が考えることができる唯一のことは、この余分な割り当てのために別のメソッドを扱っているということですが、これが理由かどうかはわかりませんか? この再割り当ての問題を回避するために、デリゲートとプロトコルが使用されていると思いました。