这里有新的(这个论坛和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];
}
我运行代码,按下UIButton,我收到错误。这是最初的投掷:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM appendString:]: unrecognized selector sent to instance 0x4e3d300' ***
谢谢!
编辑:请求整个堆栈跟踪,所以这里(在查看堆栈后我意识到可能存在混淆,我现在正在编写一个非常基本的计算器,所以ViewController等应该考虑该背景和“ anotherFunction“=”digitPressed“在这种特殊情况下”:* 第一次投掷时调用堆栈: (
0 CoreFoundation 0x00e345a9 exceptionPreprocess + 185
1 libobjc.A.dylib 0x00f88313 objc_exception_throw + 44
2 CoreFoundation 0x00e360bb - [NSObject(NSObject)doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x00da5966 __ 转发 + 966
4 CoreFoundation 0x00da5522 _CF_forwarding_prep_0 + 50
5计算器0x0000273b - [CalculatorViewController digitPressed:] + 113
6 UIKit 0x002bb4fd - [UIApplication sendAction:to:from:forEvent:] + 119
7 UIKit 0x0034b799 - [UIControl sendAction:to:forEvent:] + 67
8 UIKit 0x0034dc2b - [UIControl(内部)_sendActionsForEvents:withEvent:] + 527
9 UIKit 0x0034c7d8 - [UIControl touchesEnded:withEvent:] + 458
10 UIKit 0x002dfded - [UIWindow _sendTouchesForEvent:] + 567
11 UIKit 0x002c0c37 - [UIApplication sendEvent:] + 447
12 UIKit 0x002c5f2e _UIApplicationHandleEvent + 7576
13 GraphicsServices 0x01723992 PurpleEventCallback + 1550
14 CoreFoundation 0x00e15944 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 52
15 CoreFoundation 0x00d75cf7 __CFRunLoopDoSource1 + 215
16 CoreFoundation 0x00d72f83 __CFRunLoopRun + 979
17 CoreFoundation 0x00d72840 CFRunLoopRunSpecific + 208
18 CoreFoundation 0x00d72761 CFRunLoopRunInMode + 97
19 GraphicsServices 0x017221c4 GSEventRunModal + 217
20 GraphicsServices 0x01722289 GSEventRun + 115
21 UIKit 0x002c9c93 UIApplicationMain + 1160
22计算器0x00002254 main + 102
23计算器0x000021e5开始+ 53
)
抛出'NSException'实例后终止调用 当前语言:auto;目前的目标-c
答案 0 :(得分:1)
*由于未被捕获而终止应用 例外 '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
的所有用途。