我的xib文件中有一堆滑块,我在我的头文件中引用如下:
@property (nonatomic, retain) IBOutlet UISlider *slider1;
@property (nonatomic, retain) IBOutlet UISlider *slider2;
@property (nonatomic, retain) IBOutlet UISlider *slider3;
然后我在头文件中声明我的NSArray:
@property (nonatomic, retain) NSArray *sliders;
现在在我的实现中,我在viewDidLoad处理程序
期间使用滑块填充数组sliders = [NSArray arrayWithObjects:slider1, slider2, slider3, nil];
当然,这些属性已经合成。 到目前为止一切运作良好。使用断点,我可以看到数组已正确填充,我使用NSLog获得滑块值。
问题是当我处理按钮提交事件时,该数组似乎是空的 此行生成执行中止错误:
id obj = [sliders objectAtIndex:0];
请任何人帮忙指出我哪里出错了?这是使用滑块集合或任何控件的正确方法吗?我想迭代它们,理想情况下使用字典,以便我可以用字符串键来引用它们,但我会选择简单的数组。
答案 0 :(得分:3)
替换
sliders = [NSArray arrayWithObjects:slider1, slider2, slider3, nil];
使用
self.sliders = [NSArray arrayWithObjects:slider1, slider2, slider3, nil];
通过直接访问ivar,您将绕过属性的内存管理,因此您的阵列在设置后即被释放。然后,您会收到崩溃,因为您正在发布已发布的对象。
答案 1 :(得分:1)
你可以替换:
id obj = [sliders objectAtIndex:0];
与
UISlider *obj = [sliders objectAtIndex:0];
也尝试拨打
self.sliders //instead of just sliders
并查看它是否仍然崩溃 如果数组非零,也会尝试创建一个条件... 你有连接插座吗? 你是在过度还是在释放 你在ARC吗?
重要问题......
答案 2 :(得分:0)
如果没有看到代码就很难猜到,但我会寻找以下内容: