2011-11-13 21 views
0

NSURLConnectionデリゲートメソッドconnectionDidFinishLoadingが実行されている間、エラーが発生しています。興味深いことに、それはシミュレータ上で動作しますが、物理デバイスでクラッシュします。さらに興味深いことに、それはconnectionDidFinishLoading、EXC_BAD_ACCESSでエラーを受け取る

  • ランのApp
  • 、この動作シーケンスが実行された場合にのみクラッシュツイートを表示します! (恐ろしい)
  • ホームボタンを押し
  • ダブルクリックしてホームボタン
  • フォースは、アプリ
  • を終了し再度オープンアプリ
  • がクラッシュしました!!!!!あなたの携帯電話を再起動するまで(:()...クラッシュキープ

ERRORログ:!

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0xa0000008 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libobjc.A.dylib     0x321befbc 0x321bb000 + 16316 
1 Tittle-Tattle     0x0002cf10 -[MapViewController connectionDidFinishLoading:] (MapViewController.m:108) 
2 Foundation      0x3316bc32 0x330a5000 + 814130 
3 Foundation      0x330c36e2 0x330a5000 + 124642 
4 Foundation      0x330c36ac 0x330a5000 + 124588 
5 Foundation      0x330c35ce 0x330a5000 + 124366 
6 CFNetwork      0x35e7689e 0x35e67000 + 63646 
7 CFNetwork      0x35e6b53e 0x35e67000 + 17726 
8 CFNetwork      0x35e6b632 0x35e67000 + 17970 
9 CFNetwork      0x35e6b23c 0x35e67000 + 16956 
10 CFNetwork      0x35e6b172 0x35e67000 + 16754 
11 CoreFoundation     0x34176afc 0x340e9000 + 580348 
12 CoreFoundation     0x341762c8 0x340e9000 + 578248 
13 CoreFoundation     0x3417506e 0x340e9000 + 573550 
14 CoreFoundation     0x340f84d6 0x340e9000 + 62678 
15 CoreFoundation     0x340f839e 0x340e9000 + 62366 
16 GraphicsServices    0x3254dfc6 0x3254a000 + 16326 
17 UIKit       0x3734e73c 0x3731d000 + 202556 
18 Tittle-Tattle     0x000200e0 main (main.m:16) 
19 Tittle-Tattle     0x00020084 start + 32 

CODE

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 

    [urlConnection cancel]; 
    [urlConnection release]; 
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

    //Since we got new fresh data we shall put it in LatestLocationData entity in CoreData 
    [self insertLastKnownLocationDataIntoCoreDataWith:responseString]; 

    //Test purpose only, See what we have got in CoreData 
    [self fetchLastKnownLocationDataFromCoreData]; 

    NSDictionary *results = [responseString JSONValue]; 
    placesNearBy = [results objectForKey:@"results"]; 

    [responseString release]; 

    [self dropNearByPlacesAnnotationsFrom:placesNearBy]; 

} 

質問:可能何ができますかこの理由?

(!ない私が)10

同様の質問が以前に尋ねたが、誰もその質問に答えた:Application not running in iOS 5


私の理解あなたがされていないメモリアドレスにアクセスしようとすると、これまでのところで、EXE_BAD_ACCESSのみ起こります以前に割り当てられていたが、今はリリースされている。 COMMENTでの応答AFTER

EDIT:

ねえFiroze、これは私があなたのアイバーズのすべてのため@property宣言を使用することをお勧めだろうNSURLConnection

あなたのコメントを見てみると
urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
+0

@FirozeLafeerちょっとマテ!私はinitメソッドを追加しました。質問ありがとう:)ありがとう。私はそこにNSStringを解放しています。なぜなら、私はallocであり、initは同じ関数ですからです。はい、私はそれを解放すべきだと思いますか?それ以外の場合は – doNotCheckMyBlog

+0

がリークしますどこからのresponseDataですか?それはどこに作成されて保持されていますか? – coneybeare

+0

@BrogrammerはresponseStringに関する私のコメントを無視します。決して気にしない、私はそこにまっすぐ考えていなかった。私はその部分を逃した。 –

答えて

3

を初期化しています方法です。彼らはあなたがしなければならない手作業によるメモリ管理をすべて軽減します。おそらくあなたの問題がどこにあるのでしょうか。

クイック例

をYourClass.h

@interface YourClass 
@property (nonatomic, retain) NSURLConnection *urlConnection; 
// More ivars 

// Method declations 
@end 

YourClass.m

@interface YourClass 

@synthesize urlConnection = _urlConnection; 

// The method where you instantiate urlConnection 
{ 
    NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request 
                    delegate:self]; 
    self.urlConnection = urlConnection; 
    [urlConnection release]; urlConnection = nil; 

    // Do whatever else you do here 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [self.urlConnection cancel]; 
    self.urlConnection = nil;  <- This takes care of releasing the ivar and setting it to nil so there is no dangerous hanging pointer 

    // ... the rest of your method 
} 

[urlConnection cancel]; 
[urlConnection release]; 
// You need to clean up after yourself with any ivars you make 
- (void)dealloc 
{ 
    [_urlConnection release]; 
    // Release any other ivars 
    [super dealloc]; 
} 
@end 
+0

私はちょうど私のdeallocとviewDidUnloadをチェックしたもう一つの事は、メッセージされたことは決してありません?これは珍しいことですか? deallocのリリースメソッドの私のすべての束のように見える無駄です:( – doNotCheckMyBlog

関連する問題