2010-10-22 7 views
0

я ожидал, чтобы это работало, только думая, что это потерпит неудачу, если бы на месте объявили другую переменную под названием «Tableview»Использование self внутри объектов?

NSLog(@"X: %@", [tableView delegate]); // Fails: tableView undeclared 

.

NSLog(@"X: %@", [[self tableView] delegate]); // Works: 

Это потому, что вам нужно, чтобы я обращался к предметам на самом объекте?

NB:Этот код находится внутри UITableViewController, поэтому делегирование является свойством в UITableView.

ответ

3

Это потому, что первый параметр пытается получить доступ к переменной или переменной экземпляра с именем tableView, которой не существует. (Вы можете убедиться в этом, зайдя в меню Файл выберите команду «Открыть» Быстро и набрав «UITableViewController.h». Вы увидите, что UITableViewController не имеет tableView Ивар)

Второй обращается ко tableview через метод -tableView, который является одобренным способом добраться до него.

Кстати, если это подкласс UITableViewController, то [[self tableView] delegate] должен быть только self (но я предполагаю, что вы это знали).

+0

Спасибо Дэйв, очень полезно. Да, я знал, что он вернул себя, я просто использовал его в качестве примера, снова большое спасибо за ваше время и помощь. – fuzzygoat

3

Существует различие между переменной экземпляра в объекте по сравнению с свойством (синтаксис @property в ObjC).

Когда вы говорите

[tableView delegate] 

вы имеете в виду переменной экземпляра под названием «Tableview», который на самом деле не существует. Обычно переменные экземпляра в UIKit начинаются с подчеркивания, причем сообщение состоит в том, что вы не должны использовать их напрямую.

С другой стороны:

[[self tableView] whatever...] //OR 
[self.tableView whatever] 

относится к собственности на UITableView под названием 'Tableview'. Это действительно существует. И это свойство является документированным способом доступа к этому представлению, поэтому на самом деле вы хотите получить к нему доступ.

Надеюсь, что это поможет.

EDIT: ooops, слишком медленно снова! Предыдущий ответ тот же.

+0

Спасибо, Фирос, очень ценим. – fuzzygoat

Смежные вопросы