NSMutableString appendString генерирует ошибку SIGABRT - PullRequest
0 голосов
/ 20 июня 2011

Новое здесь (этот форум и Xcode в целом), так что терпите меня.

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

Вот соответствующие разделы моего кода (я считаю).

В шапке:

@interface BlahViewController : UIViewController {

  NSMutableString *display;

}

@property (nonatomic, retain) NSMutableString *display;

В основном:

@implementation BlahViewController

@synthesize display;

- (void)viewDidLoad {
    self.display = [[NSMutableString alloc] init];  
}

- (void)anotherFunction:(UIButton *)sender {

    NSString *info = [[sender titleLabel] text];

    [self.display appendString:info];
}

Я запускаю код, нажимаю кнопку UIB, и я получаю ошибку.Вот начальный бросок:

  *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM appendString:]: unrecognized selector sent to instance 0x4e3d300' ***

Спасибо!

РЕДАКТИРОВАТЬ: Весь запрос стека был запрошен, так что вот оно (после просмотра стека я понимаю, что может быть путаница, янаписание очень простого калькулятора в настоящее время, поэтому ViewController и т. д. должны учитывать этот фон и в этом конкретном случае "anotherFunction" = "digitPressed":

* Вызов стека при первом броске:(

0 CoreFoundation 0x00e345a9 исключениеPreprocess + 185
1 libobjc.A.dylib 0x00f88313 objc_exception_throw + 44
2 CoreFoundation 0x00e360bb - [NSObject] не выбирает): не выбирает)1028 * 3 CoreFoundation 0x00da5966 __ переадресация
+ 966
4 CoreFoundation 0x00da5522 _CF_forwarding_prep_0 + 50
5 Калькулятор 0x0000273b - [CalculatorViewController digitPressed:] + 113 * 0xb5 UB * 6 * UFB * 6, UFB * 6, UFB * 6, UFB, UF, 6, UB, UF, 6, UB, UF, 6 *.sendAction: to: от: forEvent:] + 119
7 UIKit 0x0034b799 - [UIControl sendAction: to: forEvent:] + 67
8 UIKit 0x0034dc2b - [UIControl (Внутренний) _sendActionsForEvents: withEvent:] + 527
9 UIKit 0x0034c7d8 - [UIControl touchS закругленный: withEvent:] + 458
10 UIKit 0x002dfded 0x002dfded0x002c0c37 - [UIApplication SendEvent:] + 447
12 UIKit 0x002c5f2e _UIApplicationHandleEvent + 7576 * одна тысяча сорок-одна * 13 GraphicsServices 0x01723992 PurpleEventCallback + 1550 * +1042 * 14 CoreFoundation 0x00e15944 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION * 1 044 * + 52
15 CoreFoundation 0x00d75cf7 __CFRunLoopDoSource1 +215
16 CoreFoundation 0x00d72f83 __CFRunLoopRun + 979
17 CoreFoundation 0x00d72840 CFRunLoopRunSpecific + 208
18 CoreFoundation 0x00d72761 CFRunLoopRunInMode + 97
702 * 070S * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 0 * 7 * 10 * 7 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 0 * 0 * 7 * 10 * 10 * 10 * 10 * 10 * 10-графических, графических, графических, графических, графических, графических, графических, графических, графических, графических, графических, графических, графических, графических, графических, графических, в том числе, и других.UIKit 0x002c9c93 UIApplicationMain + 1160
22 Калькулятор 0x00002254 main + 102
23 Калькулятор 0x000021e5 start + 53
)
завершение вызова после выброса экземпляра 'NSException'
Текущий язык: авто;в настоящее время цель-с

1 Ответ

1 голос
/ 20 июня 2011

* Завершение приложения из-за отсутствия связи исключение NSInvalidArgumentException, причина: '- [__ NSArrayM appendString:]: нераспознанный селектор отправлен на экземпляр 0x4e3d300 '*

Это означает, что вы называете appendString: экземпляром некоторого вида NSArray, который, очевидно, не будет работать.

Если предположить, что [self.display appendString:info]; является фактическим источником исключения, то это происходит потому, что self.display, вероятно, был перевыпущен и, по совпадению, экземпляр NSArray был размещен в том же месте в памяти. *

Вы можете использовать обнаружение зомби, чтобы отладить это.

В качестве альтернативы, вы можете повредить память где-нибудь. Или, может быть, есть другое назначение display.

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

<Ч />
5 Calculator 0x0000273b -[CalculatorViewController digitPressed:] + 113

Показать источник для вашего digitPressed: метода.

<Ч />
self.display = [[NSMutableString alloc] init];  

Это утечка памяти; это будет сохранено дважды. Просто наберите self.display = [NSMutableString string]; и self.display = nil; (в вашем viewDidUnload).

Но это не источник вашей проблемы; что-то сбрасывает display переменную или , оно переустанавливается. Показать все варианты использования display.

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