在数组中加载不同的数据

时间:2013-05-30 11:15:18

标签: iphone objective-c arrays

所以我得到了一个名为tableDateArray的数组设置,它在 SubClass.h 中定义。现在我试图更改数据的数据,或者不选择按钮。

我在 MainView.m 中的代码:

- (IBAction)dateSpecifiedButtonTouch:(id)sender {

if (monthly.enabled == NO){
    NSLog(@"no");
    tableDateArray = [NSArray arrayWithObjects:
                      @"January 2012",
                      @"February 2012",
                      @"March 2012",
                      @"April 2012",
                      @"May 2012",
                      @"June 2012",
                      @"July 2012",
                      @"August 2012",
                      @"September 2012",
                      @"Octobre 2012",
                      @"November 2012",
                      @"December 2012",
                      @"All months",
                      nil];
    }

if (monthly.enabled == YES){
    NSLog(@"yes");
    tableDateArray = [NSArray arrayWithObjects:
                      @"2002",
                      @"2003",
                      @"2004",
                      @"2005",
                      @"2006",
                      @"2007",
                      @"2008",
                      @"2009",
                      @"2010",
                      @"2011",
                      @"2012",
                      @"All years",
                      nil];
}}

因此,NSlog正在追踪正确的值,因此不是问题。但我的数组将填充先选择的任何状态,并拒绝更改数据。我肯定会忽略一些简单的事情。

根据请求添加:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell"; // unused method of type cell.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = [tableDateArray objectAtIndex:indexPath.row];
return cell;
}

我不认为即时通讯reloaddata说实话。

5 个答案:

答案 0 :(得分:2)

从提供的代码到现在看起来还不错。没有理由可以说是为什么它不起作用

可能这是编写代码的更正确的方法

- (IBAction)dateSpecifiedButtonTouch:(id)sender {
    if (monthly.enabled)
    {
        NSLog(@"yes");
        tableDateArray = [NSArray arrayWithObjects:
                          @"2002",
                          @"2003",
                          @"2004",
                          @"2005",
                          @"2006",
                          @"2007",
                          @"2008",
                          @"2009",
                          @"2010",
                          @"2011",
                          @"2012",
                          @"All years",
                          nil];
    }
    else
    {
        NSLog(@"no");
        tableDateArray = [NSArray arrayWithObjects:
                          @"January 2012",
                          @"February 2012",
                          @"March 2012",
                          @"April 2012",
                          @"May 2012",
                          @"June 2012",
                          @"July 2012",
                          @"August 2012",
                          @"September 2012",
                          @"Octobre 2012",
                          @"November 2012",
                          @"December 2012",
                          @"All months",
                          nil];

    }
[table reloadData];
}

编辑:

对于那个目的,我说有2个ViewControllers VC1,VC2

在VC1中,您正在更新该值,在VC2中,该表包含名为inputArray的数据源数组。

  • 按下按钮时在VC1中
  • 获取vc2的实例
  • 将数组分配给VC2instance.inputArray = tableDataArray;
  • 使用reloadData
  • 在表中调用刷新

答案 1 :(得分:1)

Geez ......这么多答案都错了。

只需从触摸每月按钮的IBAction中拨打[yourTableViewOutlet reloadData]

E.G。

- (IBAction)dateSpecifiedButtonTouch:(id)sender {
    ...
    ...
    ...
    ...
    [yourTableViewOutlet reloadData];
}

当然,您需要将“yourTableViewOutlet”更改为您已连接到插座的表格视图的真实名称。

答案 2 :(得分:0)

- (IBAction)dateSpecifiedButtonTouch:(id)sender {

    if (monthly.enabled == NO){
        NSLog(@"no");
        tableDateArray = [[NSMutableArray alloc ]initWithObjects:
                          @"January 2012",
                          @"February 2012",
                          @"March 2012",
                          @"April 2012",
                          @"May 2012",
                          @"June 2012",
                          @"July 2012",
                          @"August 2012",
                          @"September 2012",
                          @"Octobre 2012",
                          @"November 2012",
                          @"December 2012",
                          @"All months",
                          nil];
    }

    if (monthly.enabled == YES){
        NSLog(@"yes");
        tableDateArray = [[NSMutableArray alloc ]initWithObjects:
                          @"2002",
                          @"2003",
                          @"2004",
                          @"2005",
                          @"2006",
                          @"2007",
                          @"2008",
                          @"2009",
                          @"2010",
                          @"2011",
                          @"2012",
                          @"All years",
                          nil];
    }}

答案 3 :(得分:0)

- (IBAction)dateSpecifiedButtonTouch:(id)sender {
    //maybe toggle monthly.enabled here?
    [yourTableView reloadData];

}
static NSArray * tableDateArray = nil;
static NSArray * tableYearArray = nil;
+(void)initialize
{
     if(self == [MyCLass class])
     {
           tableDateArray = [[NSMutableArray alloc ]initWithObjects:
                          @"January 2012",
                          @"February 2012",
                          @"March 2012",
                          @"April 2012",
                          @"May 2012",
                          @"June 2012",
                          @"July 2012",
                          @"August 2012",
                          @"September 2012",
                          @"Octobre 2012",
                          @"November 2012",
                          @"December 2012",
                          @"All months",
                          nil];

           tableYearArray = [[NSMutableArray alloc ]initWithObjects:
                          @"2002",
                          @"2003",
                          @"2004",
                          @"2005",
                          @"2006",
                          @"2007",
                          @"2008",
                          @"2009",
                          @"2010",
                          @"2011",
                          @"2012",
                          @"All years",
                          nil];
     }
}

//all of your tableview delegates/data sources:
{
     NSArray * dataSource;

     dataSource = monthly.enabled ? tableDateArray : tableYearArray;
     //use datasource as the datasource
}

答案 4 :(得分:0)

我按照建议使用reloadData解决了我的问题。但是,必须在viewWillAppear中调用reloadData,否则它拒绝更新我的tableView。

代码:

- (void)viewWillAppear:(BOOL)animated{
    [self.tableView reloadData];
}