objective-c - 在 UIPickerView 的 numberOfRowsInComponent 中返回 [anArray count] 时出错

标签 objective-c ios cocoa-touch uiviewcontroller uipickerview

我有一个 UIViewController,它有一个 UIPickerView 和 UITableView。 UIPicker 有 3 个组件。

当我尝试通过返回 [anArray count] 来定义每个数组中的组件数量时,程序会卡住,但在加载 UIViewController 时不会抛出错误。

当我将 NSLogs 放入 viewDidLoad: 中时,[self.hours count][self.months count] [self.meridiem count],返回正确的值数量。

- (void)viewDidLoad {

[super viewDidLoad];

NSMutableArray *tempHours = [NSMutableArray array];
for (NSInteger i = 0; i < 12; i++) [tempHours addObject:[NSNumber numberWithInteger:(i+1)]];
self.hours = [NSArray array];
hours = tempHours;
[tempHours release];

NSMutableArray *tempMinutes = [NSMutableArray array];
for (NSInteger i = 0; i <= 59; i++) [tempMinutes addObject:[NSNumber numberWithInteger:i]];
self.minutes = [NSArray array];
minutes = tempMinutes;
[tempMinutes release];

NSMutableArray *tempMeridiem = [NSMutableArray array];
for (NSInteger i = 0; i <= 1; i++) [tempMeridiem addObject:[NSNumber numberWithInteger:i]];
self.meridiem = [NSArray array];
meridiem = tempMeridiem;
[tempMeridiem release];

}

现在,在 pickerView:numberOfRowsInComponent:Component: 中,如果我尝试输出 [anArray count](其中 anArray 是几个小时的占位符),代码就会卡住而不会出现错误、分钟和子午线)。如果我将 numberOfRows 设置为整数值,或 component+1 一切正常。

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

NSInteger numberOfRows;

if (component == 0) {
    // numberOfRows = component+1;
    numberOfRows = [self.hours count];
}
else if(component == 1) { 
    // numberOfRows = component+1;
    numberOfRows = [self.minutes count];
}
else { 
    // numberOfRows = component+1;
    numberOfRows = [self.meridiem count];
}

return numberOfRows;

}

我感觉我的 NSArray(小时、分钟、子午线)没有被保留,但是运行分析器并没有显示我在该 ViewController 中存在任何内存泄漏。

任何和所有的帮助将不胜感激!

最佳答案

您正在创建不必要的数组,并且没有保留重要的数组。查看您的代码:

self.hours = [NSArray array]; 
hours = tempHours; 
[tempHours release];

在这里,您创建了一个自动释放的数组并将其设置为 self.hours 属性(希望它附加了一个 retain 关键字)。但接下来,您直接访问 ivar 并将其设置为 tempHours。然后,您向 tempHours 发送一条释放消息,而无需保留它。由于 tempHours 是自动释放的,它会在自动释放池的下一次耗尽时神奇地消失。我相信您想做的是:

self.hours = tempHours;

其他数组集合也是如此。

关于objective-c - 在 UIPickerView 的 numberOfRowsInComponent 中返回 [anArray count] 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6863531/

相关文章:

iphone - iOS 版 Facebook API 中的分析器警告

ios - 如何在表格 View 单元格内的 TextView 中使用动态类型

ios - 什么时候调用layoutSubviews?

objective-c - 比较两个 NSManagedObject

ios - 如何在 objective-c 中交换字符串而没有任何空格?

iOS 7 : Custom Style Cell in Tableview: How to reference labels?

ios - 在 iOS 中将单元格从一个表格移动到另一个表格

ios - 在 iphone xcode 中存储经纬度的最佳和最精确的数据类型是什么?

java - Java 中的 C stroule 等价物

ios - 在 Storyboard 中,有没有办法从布局中删除隐藏的项目?