我有这段代码:
// .m
- (void)viewDidLoad {
NSMutableArray *array = [[NSMutableArray alloc] init];
[self addToArray];
}
- (void)addToArray {
NSString *stringA;
[stringA isEqualToString:@"door"];
NSString *stringB;
[stringB isEqualToString:textField.text];
[array addObject:stringA];
if ([stringA isEqual:stringB]) {
[stringA isEqual:nil];
[tableView reloadData];
} else {
[array addObject:stringB];
[tableView reloadData];
}
}
当我调用方法addToArray时,它会一直向我返回一个名为Thread 1: Program recived signal "EXC_BAD_ACCESS"
的错误,调试器输出在行Single stepping until exit from function objc_msgSend, which has no line number information.
处显示:[self addToArray]
。怎么解决它的想法?我浪费了很多时间,请帮助我!
答案 0 :(得分:2)
正如其他人所说,array
应该是类的实例变量或属性,在.h
文件中声明:
@property (strong) NSMutableArray *array;
或者,没有ARC:
@property (retain) NSMutableArray *array;
现在您在实施文件中@synthesize array;
,可以从任何地方访问它。然后你可以这样做:
- (void) viewDidLoad
{
self.array = [[NSMutableArray alloc] init];
[self addToArray];
}
您似乎认为isEqualToString
执行任务。它没有,它检查字符串的(文本)相等。试试这个:
- (void) addToArray
{
NSString *stringA = @"door";
NSString *stringB = textField.text;
[array addObject: stringA];
if (![stringA isEqualToString: stringB])
[array addObject: stringB];
[tableView reloadData];
}
答案 1 :(得分:1)
这两个变量未初始化,会给您带来很大的问题:
NSString *stringA;
[stringA isEqualToString:@"door"];
NSString *stringB;
[stringB isEqualToString:textField.text];
您尚未为stringA或stringB分配任何内容。除了调用isEqualToString之外,从不使用。
答案 2 :(得分:1)
我在代码中注意到两件事:
1)使array
成为类变量,以便您可以使用-[addToArray]
方法访问它。最好在.h文件中执行此操作,例如:
@interface MyViewController : UIViewController {
@private
// ...skipped...
NSMutableArray * array;
// ...rest of class skipped...
}
@end
然后,在.m文件中,该方法应如下所示:
// .m
- (void)viewDidLoad {
array = [[NSMutableArray alloc] init];
[self addToArray];
}
不要忘记发布数组:
- (void)dealloc {
[array release];
[super dealloc];
}
2)不要将-[NSString isEqualToString:]
方法与变量的简单赋值混淆。因此,在您的-[addToArray]
方法中,请替换为:
NSString *stringA;
[stringA isEqualToString:@"door"];
用这个:
NSString *stringA = @"door";
而且:
NSString *stringB;
[stringB isEqualToString:textField.text];
用这个:
NSString *stringB = textField.text;
3)检查-[addToArray]
方法的逻辑 - 你要达到的目标还不是很清楚。