gpt4 book ai didi

iphone - UIAlertView 能否通过委托(delegate)传递字符串和 int

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:32 26 4
gpt4 key购买 nike

我有一个 UIAlertView(实际上有几个),我正在使用方法 -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 来触发一个 Action ,如果用户不按取消。这是我的代码:

- (void)doStuff {   
// complicated time consuming code here to produce:
NSString *mySecretString = [self complicatedRoutine];
int myInt = [self otherComplicatedRoutine];

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"HERE'S THE STUFF"
message:myPublicString // derived from mySecretString
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"Go On", nil];
[alert setTag:3];
[alert show];
[alert release];
}

然后我想做的是:

- (void)alertView:(UIAlertView *)alertView 
clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1) {
if ([alertView tag] == 3) {
NSLog(@"%d: %@",myInt,mySecretString);
}
}
}

但是,此方法不知道mySecretStringmyInt。我绝对不想重新计算它们,并且我不想将它们存储为属性,因为 -(void)doStuff 很少(如果有的话)被调用。有没有办法将此额外信息添加到 UIAlertView 以避免重新计算或存储 mySecretStringmyInt

谢谢!

最佳答案

可能将对象与任意其他对象相关联的最快方法是使用 objc_setAssociatedObject。要正确使用它,您需要一个任意的 void * 用作键;通常的做法是在您的 .m 文件中全局声明一个 static char fooKey 并使用 &fooKey 作为 key 。

objc_setAssociatedObject(alertView, &secretStringKey, mySecretString, OBJC_ASSOCIATION_RETAIN);
objc_setAssociatedObject(alertView, &intKey, [NSNumber numberWithInt:myInt], OBJC_ASSOCIATION_RETAIN);

然后使用 objc_getAssociatedObject 稍后检索对象。

NSString *mySecretString = objc_getAssociatedObject(alertView, &secretStringKey);
int myInt = [objc_getAssociatedObject(alertView, &intKey) intValue];

使用 OBJC_ASSOCIATION_RETAIN,值将在附加到 alertView 时保留,然后在释放 alertView 时自动释放。

关于iphone - UIAlertView 能否通过委托(delegate)传递字符串和 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5439560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com