我正在尝试在我的iPhone应用中创建通用UITableView
。
我有一个UITableView
,它通过SELECT查询循环使用数组填充数据。
我将数据添加到我的数组中并在cellForRowAtIndexPath:
中填充数组。
我使用该数组获取节头,并使用排序方法,我将节标题放在Array1
中。
我希望让titleForHeaderInSection:
工作,让第0部分成为静态标题名称,第1部分以后变为通用名称,这意味着标题名称将来自Array1
。
我不确定如何创建该逻辑,因为应用程序始终使用以下代码抛出EXC_BAD_ACCESS
。
我的逻辑:我将数组的计数保留在int
中并查看该值是否大于0.如果是,我将为objectAtIndex:0
添加节标题,否则我使用静态的。但是当计数达到2时,对于第2节和objectAtIndex:1
,它会中断并抛出EXC_BAD_ACCESS。
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
int value = [[self Array1] count];
if(section == 0)
return @"Countries";
if (value > 0) {
if (section == value){
return [[self Array1] objectAtIndex:section - 1];
}
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
int count = [[self Array1] count];
return count + 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
int value = [[self Array1] count];
if (section == 0) {
return [self.Array count];
}
if (value > 0) {
if (section == [[self Array1] count]) {
NSString *initialLetter = [[self Array1] objectAtIndex:section - 1];
// get the array of elements that begin with that letter
NSArray *elementsWithInitialLetter = [self elementsWithInitialLetter:initialLetter];
// return the count
return [elementsWithInitialLetter count];
}
}
}
答案 0 :(得分:0)
看起来你只是错过了支持Array1方法的iVar上的保留。将数组声明为属性:
@property (nonatomic, retain) NSArray* datastore;
然后在此方法中缓存您在Array1方法中引用的值(可能在viewDidLoad中)。
self.datastore = [self Array1];
然后将[self Array1]
的所有剩余引用替换为self.datastore
。构建运行并查看它是否仍然崩溃。 (别忘了在你的dealloc中设置self.datastore = nil
!