#iphone
#iPhone
Вопрос:
//AppDelegate (In applicationDidEnterForeground)
SomeClass* object = [[SomeClass alloc]init];
[object SomeMethod:nil];
//In SomeClass.h
-(void)SomeMethod:(id)sender;
//In SomeClass.m
-(void)SomeMethod:(id)sender {
SomeUILabel.text = @"hehehe!!";
}
Я установил точку останова в строке SomeUILabel.text, и она прошла. Но SomeUILabel.text не изменился. Можете ли вы сказать мне, чего не хватает?
Комментарии:
1. Где определена ваша SomeUILabel?
2. вы работаете над mainthread?
Ответ №1:
Я предполагаю, SomeClass
это контроллер представления? На самом деле вам не следует пытаться управлять контроллером представления таким образом, задача контроллера представления — управлять его представлениями.
Одна вещь, которую вы должны помнить, это то, что основное представление контроллера представления загружается лениво. Если у вас есть файл nib, в котором вы настраиваете, то он будет работать SomeUILabel
до тех пор, пока этот файл nib не будет загружен. ……… nil
. Это перо не будет загружено до тех пор, пока UIKit не решит, что просмотр необходим. Чрезвычайно хакерский способ проверить, является ли это проблемой, — это NSLog(@"%@", object.view);
перед отправкой SomeMethod:
сообщения. Это вызовет загрузку представления, поэтому, пока SomeUILabel
правильно подключен IBOutlet
, это будет работать. Но вам действительно нужно реорганизовать свой код, вот в чем настоящая проблема.
Комментарии:
1. SomeUILabel имеет значение null. Как мне запустить загрузку представления? NSLog(«%@», object.view); вернул ошибку (Передавая аргумент 1 ‘NSLog’ из несовместимого типа указателя)
2. Упс, моя ошибка: NSLog (@»% @», object.view);
3.
NSLog
Вызова достаточно, чтобы запустить загрузку представления. Хотя это взлом, вы никогда не должны использовать его ни для чего, кроме быстрого теста отладки. Вы также могли бы вызвать[object loadView];
.4. Все, что мне нужно, это некоторая метка для отображения определенного текста, когда приложение выходит на передний план. Какой лучший способ реорганизовать код?
5. Я бы отправил уведомление и позволил любым контроллерам просмотра, которые заинтересованы в состоянии переднего плана, прослушать его.
Ответ №2:
попробуйте NSLog (@»хехехе!!») Я полагаю, это сработает
Я думаю, вы вызываете метод, в то время как «SomeUILabel» по-прежнему равен нулю
Возможно, вы не создали ярлык, или, если вы загружаете файл xib, вы вызываете метод до загрузки этого файла xib.
Комментарии:
1. SomeUILabel определен внутри SomeClass. Я вызвал someMethod с помощью [self someMethod:nil]; из SomeClass это работает. Когда я вызвал someMethod из AppDelegate, это происходит.
2. добавьте NSLog(@»% @,»SomeUILabel); в свой someMethod. является ли какая-либо метка нулевой?