我调用方法时如何解决错误[self somemethod]

时间:2012-02-11 12:37:01

标签: iphone objective-c ios ipad

我有这段代码:

// .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]。怎么解决它的想法?我浪费了很多时间,请帮助我!

3 个答案:

答案 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]方法的逻辑 - 你要达到的目标还不是很清楚。