在继承UIAlertView并使用子类作为委托时出现问题

时间:2010-09-30 17:43:39

标签: objective-c cocoa-touch delegates uialertview

我有一点问题。我将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

1 个答案:

答案 0 :(得分:2)

buttonIndex不是指针,因此%@格式化程序不适合使用:您正在寻找%d%i。您可能会混淆NSInteger - 一种基本类型,它在32位系统上的类型定义为int,如iPhone-NSNumber,一种作为通用数字的对象类型-holder。