我有一点问题。我将UIAlertView子类化,并将其命名为UIDisclaimerAlertView。
到目前为止,子类工作正常。但现在我想把这个班级作为自己的代表。所以在我的子类中我使用了:self.delegate = self;
我这样做是因为我想在同一个类文件中使用它。
现在我遇到的问题是调用我的委托方法,但参数是(null)
。
例如:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"Trying: %@", buttonIndex);
}
每次都返回(null)。有什么想法吗?我也试过[super setDelegate: self];
(直接告诉超类(UIAlertView))并且它做了同样的事情。
这是完整的实施文件:
#import "UIDisclaimerAlertView.h"
#import "PremierSoinsAppDelegate.h"
#import "BlocTexte.h"
@implementation UIDisclaimerAlertView
@synthesize dialogKey, plist, plistPath;
- (id)initWithKeyAndBlocTexteId:(NSString *)key BlocTexteId:(NSString *)blocTexteId
{
if (self = [super init])
{
// Fetching content
BlocTexte *blocTexte = [[BlocTexte alloc] init];
NSString *messageString = [[blocTexte getBlocTextes:blocTexteId] objectAtIndex:1];
// Setting superclass' properties
self.title = @"Disclaimer";
self.message = messageString;
[super setDelegate: self];
[self addButtonWithTitle: @"Ok"];
[self addButtonWithTitle: @"Toujours"];
// Setting plist key
self.dialogKey = key;
// Loading plist content
PremierSoinsAppDelegate *AppDelegate = (PremierSoinsAppDelegate *)[[UIApplication sharedApplication] delegate];
self.plistPath = [AppDelegate saveFilePath:@"disclaimers.plist"];
self.plist = [[NSMutableDictionary alloc] initWithContentsOfFile:self.plistPath];
[blocTexte release];
}
return self;
}
- (void)show {
[super show];
}
- (void)toujours
{
[self.plist setValue:@"1" forKey:self.dialogKey];
[self.plist writeToFile:self.plistPath atomically:YES];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"Trying: %@", buttonIndex);
}
@end
答案 0 :(得分:2)
buttonIndex不是指针,因此%@
格式化程序不适合使用:您正在寻找%d
或%i
。您可能会混淆NSInteger
- 一种基本类型,它在32位系统上的类型定义为int
,如iPhone-NSNumber
,一种作为通用数字的对象类型-holder。