2011-05-28 58 views
1

我的目標C新和我有一些問題.... 這是我的代碼: 1)EXC_BAD_ACCESS NSString的目標C

testAppDelegate.h (not all): 
    @interface testAppDelegate : NSObject <NSApplicationDelegate> { 
    IBOutlet NSWindow *windowLogin; 
    IBOutlet NSWindow *windowContactList; 
    IBOutlet NSTextField *memStatus; 
    NSString *access_token, *expires_in, *user_id; 
    NSMutableArray *records;} 

2)testAppDelegate.m(不是全部):

int posInStr(NSString *subString, NSString *genString){ 
    NSRange match; 
    match = [genString rangeOfString:subString]; 
    return match.location; 
} 

NSString* pars(NSString *str_,NSString *str,NSString *_str){ 
    NSString *tmp; 
    int startPos = posInStr(str_,str) + [str_ length]; 
    tmp = [str substringFromIndex:startPos]; 
    int finishPos = posInStr(_str, tmp); 
    return [tmp substringToIndex:finishPos]; 
} 

-(IBAction)but2Click: (id)sender{ 
    NSString *tmp2 = access_token; 
    NSString *tmp = [NSString stringWithFormat:@"https://api.vkontakte.ru/method/messages.getDialogs?count=3&access_token=%@",tmp2]; 
    NSURL *url = [NSURL URLWithString:tmp]; 
    NSLog(@"%@",tmp); 
    NSLog(@"%@",url); 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDelegate:self]; 
    [request setDidFinishSelector:@selector(showLoaded)]; 
     [request startAsynchronous]; 
} 

-(IBAction)but1Click:(id) sender{ 
    NSURL *url = [NSURL URLWithString:@"http://api.vkontakte.ru/oauth/authorize?client_id=293&scope=friends,messages&redirect_uri=http://api.vkontakte.ru/blank.html&display=popup&response_type=token"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDelegate:self]; 
    [request setDidFinishSelector:@selector(requestFinishedtest:)]; 
    [request startAsynchronous]; 
} 
- (void)requestFinishedtest:(ASIHTTPRequest *)request 
{ 
    [memStatus setStringValue:@"Loading..."]; 
    NSString *tmp = [NSString stringWithFormat:@"%@",[request url]]; 
    [tmp retain]; 
    access_token = pars(@"access_token=", tmp, @"&"); 
    NSLog(@"%@",access_token); 
    expires_in = pars(@"expires_in=", tmp ,@"&"); 
    user_id = pars(@"user_id=", [NSString stringWithFormat:@"%@&",tmp], @"&"); 
    [memStatus setStringValue:@"Logined"]; 
    [windowLogin orderOut:nil]; 
    [windowContactList makeKeyAndOrderFront:self]; 
    [NSApp activateIgnoringOtherApps:YES]; 
} 

我的問題: 「EXC_BAD_ACCESS」 在 「but2Click」

+0

在哪一行該功能是錯誤其他提示? – Maz 2011-05-28 18:04:07

回答

1

您分配一個autoreleaseð這裏對象:

access_token = pars(@"access_token=", tmp, @"&"); 

access_token之前必須通過一個按鈕抽頭調用but2click方法來得到釋放。

如果您想稍後使用它,您需要保留它。

+0

好眼睛!這絕對是一個問題。 – 2011-05-28 18:08:25

1

從代碼中很難弄清楚這一點 - 您將不得不對其進行調試。

我寫這blog to help understand and debug EXC_BAD_ACCESS

基本上,你取消引用是指向未分配給您的進程內存的指針。主要的原因,這可能發生在

  1. 您正在使用已釋放的對象
  2. 堆損壞

你應該做調試此的事情:

  1. 做一個構建和分析。泄漏報告不好,但與這個問題無關 - 你想尋找保留太少的問題

  2. 打開Zombies and run in the debugger。現在,沒有任何對象會被釋放,但是當它們的保留計數爲0時,如果使用它們,它們會向調試器投訴。

上有博客,是有點難解釋