2015-07-20 2 views
1

У меня проблема, но много сообщений о googling и SO не помогло. В моем приложении iOS swift у меня есть контроллер панели вкладок с двумя вкладками. Когда пользователь нажимает на вторую вкладку, приложение переключается на второй экран для создания события. Пользователь может переключаться между двумя вкладками свободно. Хотя на второй вкладке для создания события пользователь может добавить несколько мест размещения кандидатов для события. Способ, которым пользователь может добавить местоположения, должен быть через карту, и я использую MapKit. Я использую push-сегу, чтобы отправить пользователя на новый UIViewController с картой внутри него. Когда пользователь нажимает кнопку добавления местоположения, карта отображается правильно (в настоящее время я не делал никакой логики для взаимодействия с картой). Моя проблема заключается в том, что, если пользователь нажимает на кнопку назад (чтобы закрыть экран карты) и попробуйте еще раз, чтобы добавить место, то UIViewController покажет серую карту и приложение будет висеть на линии:Отображение MapKit во второй раз сбой с EXC_BAD_ACCESS

class AppDelegate: UIResponder, UIApplicationDelegate { 

и сообщение об ошибке:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x103c) 
#0 0x00699440 in EAGLContext_renderbufferStorageFromDrawable(EAGLContext*, objc_selector*, unsigned int, id<EAGLDrawable>)() 

Я знаю, что многие SO сообщения говорили о вопросах памяти, такие как этот SO post и я попробовать свои решения, но это не помогло.

Это очень простой код для моего UIViewController, который показывает карту:

import UIKit 
import MapKit 
import ObjectMapper 
import CoreLocation 


class AddRestaurantViewController: UIViewController{ 


@IBOutlet weak var theMapView: MKMapView! 


override func viewDidLoad() { 
    super.viewDidLoad(); 
    println("viewDidLoad") 

} 

override func viewWillAppear(animated: Bool) { 
    println("viewWillAppear") 
} 

override func viewWillDisappear(animated: Bool) { 
    println("viewWillDisappear") 
} 

override func viewDidDisappear(animated: Bool) { 
    self.purgeMapMemory() 
} 

func purgeMapMemory(){ 
    println("Now purging...") 
    self.theMapView.mapType = MKMapType.Standard 
    self.theMapView.removeFromSuperview() 
    self.theMapView = nil 
} 

} 

Любой намек?

+0

Это происходит именно со мной. В моем случае я нажимаю ViewController, как вы. Более странно, приложение только сбой на моем iPhone 6+ при отладке с помощью xcode. Я все еще ищу проблему. – Jakehao

ответ

2

Эта проблема растратила день моей жизни. После огромного времени тестирования я пришел к выводу, что, возможно, это ошибка для iOS 8.3 на iPhone 6 плюс.

Так, чтобы подвести итог,

мое приложение аварий, когда

1) я отладки в Xcode на моем iPhone 6 плюс;

2) Я составляю пустой UIViewController (RootVC), который содержит UIButton, действие которого нажимает на другой UIViewController (MapVC), в котором есть только MKMapView;

3) Поэтому, когда я нажимаю кнопку и нажимаю на MapVC, я возвращаюсь к RootVC, нажимая кнопку «Назад» на панели навигации. Затем снова, когда я снова нажимаю кнопку, чтобы нажать в MapVC, приложение выйдет из строя.

Однако, когда я не запускаю приложение из Xcode, приложение не сбой на том же устройстве. Например, когда я загружаю свое приложение в Testflight и загружаю приложение на свой iPhone 6 плюс, он не падает.

Кроме того, я тестировал на iPhone 5, iphone 6 с iOS 8.4 на нем. Приложение не сбой.

И я не могу воспроизвести проблему, создав новый проект и сделав то же самое, аварии происходят только в моем существующем проекте.

Так что я должен обновить свой iPhone 6 плюс до iOS 8.4, тогда эта проблема исчезла. Поскольку это происходит только при отладке с Xcode, я должен рискнуть, чтобы он не потерпел сбоев после того, как пользователь загрузил приложение из магазина приложений.

Смежные вопросы