UIlabel - связать текстовое свойство с другой строкой NSString - PullRequest
2 голосов
/ 28 сентября 2010

Можно ли "связать" текстовое свойство UILabel с другой строкой NSString, чтобы при изменении этой другой NSString изменялось и текстовое свойство UILabel?

Пример:

UILabel *label = [[UILabel alloc] init];  
NSString *str = @"labelText1";  
label.text = str;  
str = @"labelText2"; //after this assignment label.text is still "labelText1"

Ответы [ 2 ]

5 голосов
/ 28 сентября 2010

В вашем вопросе вы не «изменили» никакие объекты - NSString экземпляры являются неизменяемыми, и вы только что сказали, что некоторые переменные указывают на один экземпляр вместо другого.Предполагая, что ваша строка действительно является свойством какого-либо другого объекта модели, вы можете заставить свой контроллер наблюдать это свойство (с -observeValueForKeyPath:ofObject:change:context) и обновлять метку каждый раз, когда он видит изменение.

0 голосов
/ 28 сентября 2010

Нет, вы не можете. Определение свойства для текста: -

@property(nonatomic, copy) NSString *text

, что означает, что метод установки UILabel берет копию назначенной вами строки. Если этого не произойдет, вы никогда не сможете назначить автоматически освобожденную строку для UILabel, так как текст метки исчезнет или сойдет с ума, как только исходная назначенная вами строка будет освобождена, и вы в конечном итоге будете отвечать за управление памятью. UILabel собственный текст, который не будет хорошей ситуацией.

Ответ заключается в предоставлении некоторого механизма для обновления текста метки всякий раз, когда интересующая вас строка изменяется. Как заметил @Graham Lee, этого никогда не случится с неизменяемой строкой, но, если исходный текст где-то меняется с изменчивостью (скажем, счетом в игре), тогда вам следует просто обновлять метку всякий раз, когда это происходит. Опять же, как указал @Graham Lee, Cocoa предоставляет наблюдателей, делегатов и другие различные методы, чтобы сделать это относительно легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...