从详细信息在Master中插入新的UITableViewCell

时间:2012-04-13 14:28:29

标签: iphone xcode uitableview master-detail

我有一个简单的主 - 详细信息应用程序,我正在使用详细信息视图来配置要插入主列表的数据。

我有一个名为“Calculation”的自定义类,它是我需要插入每行的对象。

我可以将对象从详细视图传递到主视图就好了,它只是不会插入新行。

在详细视图中,我启动了我的对象,用数据填充它并使用自定义segue将它发送到MasterViewController中的“insertNewObject”方法:

- (IBAction)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    NSString *s = @"1";
    NSNumber *n = [f numberFromString:s];

    Calculation *calc = [[Calculation alloc] initWithValue:@"$1661.70" descr:@"1 Ounce 24k Gold" textInput:@"1" percentDisplay:@"0%" purityIndex:n metalIndex:n weightUnitIndex:n sliderValue:n];

    [segue.destinationViewController insertNewObject:calc];
}

在MasterViewController中,这是我的插入代码:

    -(void)insertNewObject:(NSObject *)newCalculation {

        if (!_objects) {
            _objects = [[NSMutableArray alloc] init];
        }
        [_objects insertObject:newCalculation atIndex:0];
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

    }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    NSObject *object = [_objects objectAtIndex:indexPath.row];
    cell.textLabel.text = [object valueForKey:@"value"];
    cell.detailTextLabel.text = [object valueForKey:@"descr"];
    cell.textLabel.shadowColor = [UIColor blackColor];
    cell.textLabel.shadowOffset = CGSizeMake(0, -1);
    return cell;
}

我可以在MVC中使用NSLog整天打印对象,但无论从详细视图控制器添加多少次对象,数组计数始终为1,并且没有任何单元格被添加到tableview中。 / p>

如果我在MVC中实例化对象并插入它,相同的确切代码就可以正常工作。

1 个答案:

答案 0 :(得分:0)

segue实际上是将数据从细节发送到master的错误机制。 (它的另一个方向很好!)你最好定义一个以-(void)insertNewObject:(NSObject *)newCalculation;作为必需方法的委托协议,让你的主工具实现该协议,并将作为一个委托给你的细节控制器。

然后细节控制器只调用[delegate insertNewObject:calc];