找到索引路径的编号

时间:2013-12-26 03:36:45

标签: ios iphone objective-c uitableview

我很难找到点击的行数。我发现的是

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

但是我得到了一个疯狂的数字。我有UITableView,显示包含4个项目的数组。

我也试过这个:

    NSIndexPath *leo = [self.tableView indexPathForSelectedRow];
    NSInteger *leo2 = leo.row;

但是leo2始终是0.我该怎么办?

2 个答案:

答案 0 :(得分:4)

你有两个部分,你只需要把它们放在一起。这是你在找什么?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSInteger leo2 = indexPath.row;
    id someObject = myArray[leo2];
}

正如@nkongara指出的那样,你在指针名称旁边添加了一个星号,暗示它是一个Objective C对象,当它是一个原始类型时。在这种情况下,longint取决于系统。有关详细信息,请参阅下面定义NSIntegerNSUInteger的方式。

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

答案 1 :(得分:1)

您编写的代码应该为您提供编译器警告。

一个好的经验法则:找到每个编译器警告的修复程序,没有例外。他们总是表明存在错误。有时某些东西会导致错误的结果而不是崩溃,但是编译器警告总是有原因。

有关警告的最糟糕的事情之一是它们仅在您编辑源文件时显示。如果忽略它们,编译器会将文件视为已成功编译,因此除非您编辑文件或在项目上运行“干净”,否则不会再次看到警告。这意味着如果您没有修复警告,它就会变得不可见。坏。非常糟糕。

有时修复是类型转换,因此编译器知道对象的类型。其他时候,如上所述,答案是摆脱虚假的星号。

另一个应该更改的代码示例,以消除警告:

我们都写了if语句

if (a == b)

(表示“如果a等于b”)

as

if (a = b)
而是偶然的。第二个声明在技术上是合法的,但几乎总是错误的。这意味着:将=语句的右侧复制到左侧(将a设置为b的值)。然后将右侧的结果作为if语句的结果进行评估。因此,如果b不等于零,则if语句将为真。

LLVM编译器标记if (a = b)并发出警告,因为这是一个常见的错误。如果您确实想要这样做,可以添加一组额外的括号:

if ((a = 0))

告诉编译器你真的想要这样做。 (我说任何人都应该开枪,但这是一个不同的问题......)

这是一个修改代码的例子,可以让你的意图清晰,无论是编译器还是阅读代码的其他人。