0

我不理解从 Apple 的 Master Detail Template 中获取的以下方法中的 Objective-C:

- (void)insertNewObject:(id)sender
{
    if (!_objects)
    {
        _objects = [[NSMutableArray alloc] init];
    }

    [_objects insertObject:[NSDate date] atIndex:0];

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0
                                                inSection:0];
    [self.tableView insertRowsAtIndexPaths: @[indexPath]
                          withRowAnimation: UITableViewRowAnimationAutomatic];
}

代码位于 MasterViewController.m 文件中。我的困惑点是: - 是什么@[indexPath]意思?这是一种将某些东西制作成数组的语法吗?我只遇到了“@”作为表示字符串的字符。澄清:我了解什么是 NSIndexPath 以及它是如何工作的。我不熟悉将对象放在 @ 字符前面的括号中的语法。这会使某些东西成为数组吗?如果我有几个 NSIndexPaths 怎么办?我可以以这种方式将它们全部加载到数组中吗@[indexPath1, indexPath2, indexPath3] 这适用于从 NSObject 派生的任何东西吗?结果总是一个数组吗?这在语言中记录在哪里 - 这个语言功能叫什么(所以我可以查一下)?

  • 方法 insertRowsAtIndexPaths:withRowAnimation 似乎指定了将某些内容放入表中的位置,但并不完全指定要放入的内容。当向表中插入项目时,该方法如何知道要使用哪个对象作为数据源。委托和数据源的关系在 xib 中指定,因此很明显 MasterViewController 将处理数据与表的关联,但似乎与任何NSMutable *_objects;地方指定的数组和表没有任何关系。

感谢您帮助解释这一点,因为很明显我错过了一些非常基本的东西。

4

1 回答 1

1

这是将某些东西制作成数组的语法吗

是的。在现代 Objective-C 中,正如最新clang编译器所理解的那样,还有一些@指令可以轻松创建硬编码对象:

@[object1, object2]

创建一个 NSArray;

@{@"key1": value1, @"key2": value2}

创建一个 NSDictionary,

@"hello world"

像往常一样创建一个 NSString,并且

@1, @2, @YES, @3.1415927

分别创建 NSNumber 实例。

当向表中插入项目时,该方法如何知道要使用哪个对象作为数据源。

它使用当前在调用它的表视图上设置的数据源。

于 2012-11-30T19:52:42.757 回答