Xcode“使用未声明的标识符”

时间:2012-06-24 08:07:20

标签: iphone xcode uitableview

我知道很多人都会问这个,但所有的答案都是特定的应用程序,所以我不明白如何为我的应用程序工作。

        tableData = [NSArray arrayWithObjects:@"Chocolate Brownie", @"Mushroom Risotto", nil];
    }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section
    {
        return [tableData count];
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *simpleTableIdentifier = @"SimpleTableItem";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
        }

        cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
        return cell;` 
    }

3 个答案:

答案 0 :(得分:7)

不保留ut tableData变量的原因,并且您已经通过工厂方法分配了它已经自动释放。

<。>在.h文件中,使其保留属性并将此变量与self一起使用。在你的代码。

@property(nonatomic,retain) NSArray *tableData;

in .m,

@synthesize tableData;

然后使用它:

self.tableData = [NSArray arrayWithObjects:@"Chocolate Brownie", @"Mushroom Risotto",      nil];

现在你不会得到任何错误,因为现在保留了tableData。

如果您不使用ARC,请不要忘记在dealloc中发布它。

答案 1 :(得分:4)

您必须将NSArray声明为属性并将其合成。 在您的班级定义中:

@property (retain, nonatomic) NSArray *tableData;

在实施中:

@synthetize tableData = _tableData;

答案 2 :(得分:3)

好吧,这是一个简单的修复。您在引用“tableData”的每一行上都收到错误,因为它未声明。换句话说,你的应用程序从未被告知“tableData”是什么。

您可以在.h文件中声明“tableData”,它应该看起来像这样......

@interface yourClassName : UITableViewController 
{
    NSArray *tableData;
}

编辑:如果您只是在此功能中调用此数组,请使用@grasGendarme的答案,如果您希望在整个控制器中使用它,请使用此答案。

编辑2 :关于更新后的问题,请在显示错误的行上进行检查。

enter image description here

此蓝色箭头表示您已在此行的代码中设置了断点。您可以右键单击错误并选择删除断点。