Очистка NSTextfield, связанного с nsmutablestring - PullRequest
1 голос
/ 23 января 2012

У меня есть текстовое поле, привязанное к nsmutableablestring.В элементе действия для кнопки я хочу очистить эту строку, но она выдает исключение, сообщающее, что она неизменна.

Переменная-член

NSMutableString* firstName;

Свойство для привязки к текстовому полю объявлено в .h

@property (copy) NSMutableString* firstName;

В действии для кнопки следующая строка выдаетисключение

[firstName setString:@""];

У меня нет проблем с чтением значения в firstName, чтобы получить доступ к тому, что находится в текстовом поле, поэтому привязка, кажется, работает.

Вот трассировка стека

Attempt to mutate immutable object with setString:
2012-01-22 14:48:58.084 testproj[2509:707] (
    0   CoreFoundation                      0x00007fff88233286 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff857bdd5e objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff882330ba +[NSException raise:format:arguments:] + 106
    3   CoreFoundation                      0x00007fff88233044 +[NSException raise:format:] + 116
    4   CoreFoundation                      0x00007fff882892dd mutateError + 93
    5   testproj                            0x00000001000035c4 -[AppController AddCustomer:] + 388
    6   CoreFoundation                      0x00007fff88222a1d -[NSObject performSelector:withObject:] + 61
    7   AppKit                              0x00007fff8f319710 -[NSApplication sendAction:to:from:] + 139
    8   AppKit                              0x00007fff8f319642 -[NSControl sendAction:to:] + 88
    9   AppKit                              0x00007fff8f31956d -[NSCell _sendActionFrom:] + 137
    10  AppKit                              0x00007fff8f318a30 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2014
    11  AppKit                              0x00007fff8f3988e0 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 489
    12  AppKit                              0x00007fff8f31763a -[NSControl mouseDown:] + 786
    13  AppKit                              0x00007fff8f2e20e0 -[NSWindow sendEvent:] + 6306
    14  AppKit                              0x00007fff8f27a68f -[NSApplication sendEvent:] + 5593
    15  AppKit                              0x00007fff8f210682 -[NSApplication run] + 555
    16  AppKit                              0x00007fff8f48f80c NSApplicationMain + 867

1 Ответ

2 голосов
/ 23 января 2012

Вы полагаетесь на синтезированный сеттер? copy возвращает неизменную копию, поэтому вам нужно определить свой собственный установщик. Подробнее см. http://vgable.com/blog/2009/03/17/mutable-property-and-copy-gotcha/

...