如果我在其类中调用一个方法,它就可以工作。从课外调用它会导致崩溃

时间:2010-12-29 21:34:56

标签: iphone objective-c

当我这样做时,我的应用程序崩溃没有任何错误。

footballScores = [[FootBallScores alloc] init];
[footballScores initStuff];

我从我的视图控制器的viewDidLoad中调用它。

但如果我发表评论

footballScores = [[FootBallScores alloc] init];
//[footballScores initStuff];

将方法调用initStuff移动到类FootballScores中的init方法中,它完全可以正常工作。

因此,似乎某种原因从类外部调用initStuff导致我的应用程序崩溃。

任何人都可以告诉我为什么会这样?

非常感谢, 代码

EDITS

-(void) init
{
//[self initStuff];
}

- (void)initStuff // Was - (void)awakeFromNib
{
NSLog(@" init called");
appDelegate = (FootballRadioAppDelegate *)[[UIApplication sharedApplication] 
delegate];
responseData = [[NSMutableData data] retain];
baseURL = [[NSURL 
URLWithString:@"http://footballmatchcentre.timesonlinesport.co.uk/ifb2009/league.asp?
league=EPL"] retain];
NSURLRequest *request = [NSURLRequest requestWithURL:baseURL];
[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
}

init的主体被注释掉以测试来自类外部的调用,并且我取消注释它以测试它是否通过从类中调用而起作用。

1 个答案:

答案 0 :(得分:2)

你的-init方法应该返回id类型的self,而不是void。它应该将[super init]归因于self。标准的-init实现将是:

- (id)init {
    self = [super init];
    if (self != nil) {
        // initialisation code
    }
    return self;
}

然后你可以有一个 - (void)initStuff方法,并在if中测试self!= nil的块中发送[self initStuff]。