-1

我有两个UITableView对象,它们都有一个名为的数组,该数组sectionHeaders用作引用对象,毫不奇怪,为表中的给定部分提供标题名称。第一个表视图将其作为一个NSMutableArray并根据需要动态添加标题。第二个视图使用 an并使用速记NSArray创建数组。@[item1, item2, ...]这两个对象都被声明为全局实例变量。

第一个表视图创建第二个表视图并将其推送到导航控制器堆栈上。标题在第一次显示前一个视图时正确显示,并且在显示后一个视图时它们总是正确显示,但是当我回击返回第一个视图时,部分标题与第二个视图的标题匹配。通过更改两个变量名之一可以立即解决此问题,但我更愿意首先了解为什么会出现问题。

请让我知道是否有更多信息会有所帮助。我不知道可能是什么原因造成的,所以我不完全确定哪些信息可能有用。

编辑:这是两个对象设置和交互方式的简化版本。 CalendarViewController.m

NSMutableArray *sectionHeaders;
@implementation CalendarViewController

-(id) initWithStyle:(UITableViewStyle)style {
    self = [super initWithStyle:style];
    sectionHeaders = [[NSMutableArray alloc] init];
}

//this is the method that adds items to the sectionHeaders object with irrelevant information excluded
-(void) distributeEvents {
    [self.tableView beginUpdates];
    if(condition1) {
        if(![sectionHeaders containsObject:@"Today"]) {
            [headers addObject:@"Today"];
        }
    }
    else if(condition2) {
        if(![sectionHeaders containsObject:@"Next week"]) {
            [headers addObject:@"Next week"];
        }
    }
    //et cetera...
}
//the only other time the sectionHeaders object comes up is in
- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return sectionHeaders[section];
}

第二个对象 anEventViewController是在点击单元格时初始化的。它不是使用与sectionHeaders对象关联的任何变量创建的。

EventViewController.m

NSArray *sectionHeaders;
@implementation EventViewController

//within the init method
sectionHeaders = @[@"What", @"When", @"Where"];

//later...
- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return sectionHeaders[section];
}

这就是我对这些对象所做的所有引用。对于问题中没有简化代码,我深表歉意。希望有更多的背景会有所帮助。

4

1 回答 1

0

从您的代码看来,这两个sectionHeaders数组都是在相应类的范围之外定义的,并且基本上是两个同名的全局变量 - 在这种情况下,链接器应该给您一个警告。

我建议您将它们移到它们所属的班级中。

于 2013-11-14T17:12:34.570 回答