0

在我的 UIView nib 文件中,我有一个 UITableView,它占据了大约一半的屏幕。对应的 .h 和 .m 文件是:

// helloViewController.h
#import <UIKit/UIKit.h>
@interface helloViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    NSArray *locationArray;
}
@property (nonatomic, retain) NSArray *locationArray;
@end

// helloViewController.m
@synthesize locationArray;
- (void)viewDidLoad {
    locationArray = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8",  @"9",  @"10",  @"11", nil];
    [super viewDidLoad];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    [[cell textLabel] setText: [locationArray objectAtIndex:[indexPath row]]];

    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 8;
}

当我运行它时,当我尝试滚动表格时它会崩溃(调试器中没有错误)。但是,如果我替换 [[cell textLabel] setText: [locationArray objectAtIndex:[indexPath row]]]; 和

[[cell textLabel] setText:@"Boom"];

...它不会崩溃....

是什么导致了这个问题?委托和数据源连接到 IB 中的 File's Owner,并且 File's Owner 的类设置为正确的类。我在笔尖的uiview中使用表格视图是一个问题吗?

4

3 回答 3

1

问题是您正在设置locationArrayviewDidLoad. 然后,您尝试在要设置单元格的位置再次访问此对象,但此时该数组已被释放。

您应该使用您定义的保留属性(您直接设置数组,而不是使用属性)并阅读更多关于内存管理的内容。;)

self.locationArray = [NSArray arrayWith...];
于 2009-12-05T20:08:47.830 回答
0

是的,这是因为数组的一些保留内存。U 应该在 dealloc 方法中释放 Location 数组 Ivar。使用此代码

NSArray *array = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",nil];
self.locationArray = array ;
[array release];

在 Dealloc 方法中

 [locationArray release];
于 2012-04-02T10:45:50.217 回答
0

这可能是因为您的 locationArray 以前没有保留,现在指向垃圾内存。那,或 locationArray 不包含指定索引处的项目。

于 2009-12-05T20:07:00.330 回答