Извините основной вопрос, но это прослушивает меня некоторое время теперь.
Я создаю представление деталей из UITable и пытаюсь динамично установить его маркировки, но они не обновляют:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
myObject *tmpObj = [[myObject objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil];
[tmpVC.myLabel setText:tmpObj.myTitle]; // The debugger shows the text: myTitle = "myText"
NSLog(@"%@", tmpVC.myLabel); // NSLog SHOWS NULL
[self.navigationController pushViewController:tmpVC animated:YES];
[tmpObj release];
}
соединения в Интерфейсном Разработчике установлены. Вкладка Соединений для Владельца Файла шоу
'myLabel' - 'Label (myLabel)'
какие-либо идеи, почему значение не проникает?
Еще несколько Наблюдений:
СУЩЕСТВУЕТ СВЕТ:
После проигрывания вокруг с ним некоторое время больше я переместил pushViewController оператор выше обновлений маркировки. Это разрешило обновления маркировки.
Рабочий код похож на это:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
myObject *tmpObj = [[myObject objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil];
[self.navigationController pushViewController:tmpVC animated:YES];
[tmpVC.myLabel setText:tmpObj.myTitle]; // The debugger shows the text: myTitle = "myText"
NSLog(@"%@", tmpVC.myLabel); // NSLog SHOWS NULL
[tmpObj release];
}
Но я не понимаю, почему я должен продвинуть свой viewController сначала???
Это потому, что представление контроллера лениво создается только при доступе. Нажатие на контроллер открывает доступ к представлению.
В качестве альтернативы, если вы добавите строку для доступа к свойству представления, она тоже будет работать:
myViewController *tmpVC = [[myViewController alloc] initWithNibName:@"NIBfile" bundle:nil];
tmpVC.view; // Force view creation
[tmpVC.myLabel setText:tmpObj.myTitle]; // The debugger shows the text: myTitle = "myText"
NSLog(@"%@", tmpVC.myLabel); // NSLog will display "myText"
[self.navigationController pushViewController:tmpVC animated:YES];
Не потому ли, что ваш NSLog
пытается распечатать фактический объект этикетки. Если у вас нет
NSLog(@"%@", tmpVC.myLabel.text);
В ответ на добавленную информацию: Другая ваша проблема может заключаться в том, что вы связали NSString
со своим лейблом. Вы должны связать его с UILabel
. Итак, когда вы объявляете свой myLabel
var, измените его на UILabel * myLabel
и то же самое для любого подходящего свойства.
Не уверен, но я думаю, что это то, что происходит:
Когда представление выдвигается, контроллер загружает представление из пера и подключает действия и выходы . До этого розетки не подключены, поэтому tmpVC.myLabel равен нулю.
Если вы хотите быть уверенным, вы можете поместить точку останова в viewDidLoad
tmpVC, чтобы видеть, когда представление загружено.
Если tmpVC.myLabel
является NULL, это, вероятно, указывает на то, что вы не установили необходимую связь в Interface Builder с UILabel и переменной экземпляра myLabel.
Вы @synthesize
свое свойство myLabel
в myViewController.m
? У вас должно получиться что-то вроде:
tmpVC.myLabel.text = tmpObj.myTitle;