gpt4 book ai didi

iphone - 创建一个可以在以后单击同一按钮时添加到的可变数组?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:01 24 4
gpt4 key购买 nike

一般菜鸟问题:

(1) 如何在 buttonClicked 操作中创建一个 NSMutable 数组,以便在后续单击同一按钮时向其添加更多条目?我似乎总是在每次点击时从一个新数组开始(该数组仅打印 1 个条目,这是 NSLog 语句中最新的按钮标记)。

我有大约 100 个按钮(一个按钮对应我的字符串中名为“list”的每个字符),这些按钮是在我的代码前面的一个 for 循环中生成的,并且每个按钮都被分配了一个标签。它们位于我的 ViewController View 中的 ScrollView 中。

我希望跟踪点击了多少(以及哪些)按钮,并可以选择在第二次点击时删除这些条目 .

这是我目前所拥有的:

-(void) buttonClicked:(UIButton *)sender
NSMutableArray * theseButtonsHaveBeenClicked = [[NSMutableArray alloc] initWithCapacity: list.length];
NSNumber *sendNum = [NSNumber numberWithInt:sender.tag];
[theseButtonsHaveBeenClicked addObject:sendNum at index:sender.tag];
NSLog(@"%@",theseButtonsHaveBeenClicked);
}

(2) 我已经读到我可以使用 plist 字典,但我真的不明白我将如何在代码中完成它,因为我无法手动输入字典中的项目(因为我不知道用户将点击哪些按钮)。如果我以某种方式加载并替换 plist 文件中的字典,这会更容易吗?我该怎么做?

(3) 我也不知道应该如何进行内存管理,因为我需要不断更新数组。 自动释放?

感谢您提供的任何帮助!

最佳答案

好的,首先您要创建一个局部范围的数组,每次调用 buttonClicked: 时都会重新初始化该数组。该变量应该是类初始化周期的一部分。

使用 NSMutableDictionary 而不是 NSMutableArray 也会更好。使用字典,我们不必指定容量,我们可以使用按钮的标签作为字典键。

这是您需要做的,这三个步骤总是一起进行:property/synthesize/release。一个值得记住的好东西。

  //Add property declaration to .h file
@property (nonatomic, retain) NSMutableDictionary * theseButtonsHaveBeenClicked;

//Add the synthesize directive to the top of .m file
@synthesize theseButtonsHaveBeenClicked;

// Add release call to the dealloc method at the bottom of .m file
- (void) dealloc {
self.theseButtonsHaveBeenClicked = nil; // syntactically equiv to [theseButtonsHaveBeenClicked release] but also nulls the pointer
[super dealloc];
}

接下来我们在初始化类实例时创建一个存储对象。将此添加到您类(class)的 initviewDidLoad 方法。

 self.theseButtonsHaveBeenClicked = [[NSMutableDictionary alloc] dictionary]; // convenience method for creating a dictionary

更新后的 buttonClicked: 方法应该看起来更像这样。

    -(void) buttonClicked:(UIButton *)sender {

NSNumber *senderTagAsNum = [NSNumber numberWithInt:sender.tag];
NSString *senderTagAsString = [[NSString alloc] initWithFormat:@"%@",senderTagAsNum];

// this block adds to dict on first click, removes if already in dict
if(![self.theseButtonsHaveBeenClicked objectForKey:senderTagAsString]) {
[self.theseButtonsHaveBeenClicked setValue:senderTagAsNum forKey:senderTagAsString];
} else {
[self.theseButtonsHaveBeenClicked removeObjectForKey:senderTagAsString]; }
[senderTagAsString release];
NSLog(@"%@", self.theseButtonsHaveBeenClicked);
}

关于iphone - 创建一个可以在以后单击同一按钮时添加到的可变数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6241193/

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