0

ルートビューコントローラーに巻き戻すビューコントローラーがいくつかあります。ほとんどのビュー コントローラーでは、アンワインド セグエはアプリをクラッシュさせることなくうまく機能します。CLlocationmanager を使用するビューコントローラーのみが、ルート ビューコントローラーへのアンワインド セグエを実行できません。これらは私のコードで違いを生む行です:

//Init the location Manager
locationManager = [[CLLocationManager alloc] init];
[locationManager requestWhenInUseAuthorization];
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
locationManager.delegate = self;

私のコードのこのセクションにコメントすることで、アンワインドが機能します。特に最後の行が違います。巻き戻す前に、locationmanager を解放しようとしました。時々それはうまくいきます。そうでない場合もあります。デバッグ コンソールには次のように表示されます。

0x10bfe1005:  movq   (%rdi), %r11
0x10bfe1008:  movq   %rsi, %r10
0x10bfe100b:  andl   0x18(%r11), %r10d<---Thread 1: EXC Bad_Access(code=1, adress=0x18)
0x10bfe100f:  shlq   $0x4, %r10
0x10bfe1013:  addq   0x10(%r11), %r10

それがどのような意味でも。どうすればいいのかわかりません。

編集

これを追加した後

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
[locationManager stopUpdatingLocation];
[locationManager release];
}

それは一種の作品です。5回くらい試しました。その後、再びクラッシュしました:(本当に奇妙です。よくわかりませんが、エラーメッセージが変更されたようです。「WebThread」と表示されます(以下を参照)。デリゲートメソッドも持つWebビューがあります。Webビューを次のように解放しようとします良い。

libobjc.A.dylib`objc_msgSend:
0x32f9af60:  cbz    r0, 0x32f9af9e            ; objc_msgSend + 62
0x32f9af62:  ldr.w  r9, [r0]
0x32f9af66:  ldrh.w r12, [r9, #12]  <-----WebThread(10):EXC_bad_access(code=1, address=0x100000c)
0x32f9af6a:  ldr.w  r9, [r9, #8]
0x32f9af6e:  and.w  r12, r12, r1
0x32f9af72:  add.w  r9, r9, r12, lsl #3

0x32f9af76:  ldr.w  r12, [r9]
0x32f9af7a:  teq.w  r12, r1
0x32f9af7e:  bne    0x32f9af86                ; objc_msgSend + 38
0x32f9af80:  ldr.w  r12, [r9, #4]
0x32f9af84:  bx     r12
0x32f9af86:  cmp.w  r12, #0x1
0x32f9af8a:  blo    0x32f9af98                ; objc_msgSend + 56
0x32f9af8c:  it     eq
0x32f9af8e:  ldreq.w r9, [r9, #4]
0x32f9af92:  ldr    r12, [r9, #8]!
0x32f9af96:  b      0x32f9af7a                ; objc_msgSend + 26
0x32f9af98:  ldr.w  r9, [r0]
0x32f9af9c:  b      0x32f9b1e0                ; _objc_msgSend_uncached
0x32f9af9e:  mov.w  r1, #0x0
0x32f9afa2:  bx     lr
0x32f9afa4:  nop    
0x32f9afa6:  nop    
0x32f9afa8:  nop    
0x32f9afaa:  nop    
0x32f9afac:  nop    
0x32f9afae:  nop    
0x32f9afb0:  nop    
0x32f9afb2:  nop    
0x32f9afb4:  nop    
0x32f9afb6:  nop    
0x32f9afb8:  nop    
0x32f9afba:  nop    
0x32f9afbc:  nop    
0x32f9afbe:  nop    

EDIT2

OK、prepareforsegue メソッドでロケーション マネージャーと webview を解放すると、機能します。

4

1 に答える 1

1

巻き戻す前に、ロケーション マネージャーを停止する必要があります。

巻き戻しをしているときは、基本的に巻き戻し元の ViewController をアンロードして解放しています。

しかし、これは locationManager のデリゲートであるため、ロケーション マネージャーはそれに情報を渡そうとしています。

これを修正できるはずです...

[locationManager stopUpdatingLocation];

くつろぐ前に。(おそらく prepareForSegue メソッドで)。

于 2015-01-30T12:03:55.703 に答える