使用单件类

时间:2015-11-09 04:39:01

标签: ios objective-c

我是使用故事板的Objective-C和iOS编程的新手。

场景1:包含表格视图。 (ViewController.m)

  • 显示由单例类中的NSMutableArray填充的表视图。
  • 添加按钮 - >场景2。

场景2:创建并添加对象。 (AddObjectViewController.m)

  • 在单例类中创建自定义对象并将其保存到NSMutableArray,以便从不同的场景/视图控制器访问它。
  • 保存按钮 - >场景1。
  • 取消按钮 - >场景1。

问题

  • 返回场景1时,表视图为空白。
  • 在场景1中的- (void)viewDidLoad ViewController.m ,其中填充了表格)时,单例类中的数组确实为空。
  • 但是,不久之后,数组确实包含新创建的对象。
  • 离开场景1并返回到它将更新表视图并列出刚刚添加的对象。

在ViewController中初始化单例类之前,需要更多时间来编写数据。

为此,我尝试在场景2( AddObjectViewController.m )中写入数组之后和在场景1中初始化单例类之前添加等待/休眠时间( ViewController.m )。 这是行不通的。好像一切都在睡觉。

怎么办?它应该已经按照我的逻辑工作了,从我的研究来看,单例类应该适合这种情况。

编辑:重要的代码。

代码

ViewController2.m

- (IBAction)saveButtonPressed:(id)sender {

    // Custom initialization.
    Computer *object = [[Computer alloc] initWithName:nameField.text IP:ipField.text Port:portField.text Password:passwordField.text];

    // Add Computer to array of Computers via "Singleton" (shared array).
    Computers *sharedComputers = [Computers sharedComputers];
    [sharedComputers addComputer:object];
}

ViewController.m

@implementation ViewController{
    NSMutableArray *tableData;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *tableIdentifier = @"TableItem";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableIdentifier];
    }
    cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
    cell.imageView.image = [UIImage imageNamed:@"Computer Filled-25.png"];
    return cell;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // Initialize table data
    tableData = [[NSMutableArray alloc] init];

    // Add objects to table
    Computers *sharedComputers = [Computers sharedComputers];
    for (Computer* item in [sharedComputers getArray]) {
        [tableData addObject:item.name];
    }

}

Computers.m(Singleton类)

- (void)addComputer:(Computer *)aComputer {
    [computerArray addObject:aComputer];
}

1 个答案:

答案 0 :(得分:0)

如果在viewDidLoad方法中填充场景1中的表视图的dataSource数组,则需要知道从场景2返回场景1后将不再调用viewDidLoad。解决方案是移动dataSource实现to SceneWillAppear方法在场景1

-(void)viewDidLoad{
    [super viewDidLoad];
   dataSource = [[NSMutableArray alloc]init];
}

-(void)viewWillAppear:(BOOL)animated{
   [super viewWillAppear:animated];
   [dataSource removeAllObjects];
   dataSource = singletonClass.MutableArray; // fill dataSource from your singleton class
}

这将确保每次查看Scene1时刷新tableview数据