2015-02-14 16 views
10

serbest bırakın ve sadece kurar benim uygulamalar gizemli çarpıyor tüm Xcode 6.3 (beta 1) ve Swift 1.2 e güncelledikten sonra oluşturur. Hata ayıklamada, Swift 1.2 için kodumu güncelleştirdikten sonra iyi çalışıyorlar. Hata ayıklayıcı, anlamında hiçbir anlam ifade etmemektedir; burada çökmeler meydana gelir ve neden açık değildir. çöker bazılarıGizemli çöker - Release sadece

Malloc: *** nesne 0x7ff0c3824800 hata: işaretçi ***

Diğer "tanınmayan seçici" olarak ayıklamak için malloc_error_break bir kesme noktası ayarlamak ayrılmamış serbest olan, ama hiçbir anlam ifade etmiyorlar; Seçicilerin gönderildiği nesneler, kullanmanın farkında olduğum nesneler bile değildir. Bellek yönetimi ile ilgili bir şeylerin yanlış gittiği anlaşılıyor, böylece bir nesne diğeriyle değiştiriliyor.

buna neden yeryüzünde ne olabilir? Çağrı yığında (hiçbir zaman kodumda kodun nerede olduğunu bile bilmiyorum) ve kodumdan geçtiğimde hata ayıklayıcının değişken bölmesinde hiçbir değişken görünmüyor. şeylerin değerlerine bakın), onu nasıl takip etmeye bile başlayabilirim? Ben aşağı sadece bu oldu dek

cevap

12

Şaşırtıcı, ben çoğunlukla büyük kartelalarımızda kodunu silerek, parçayı bu aşağı yaptılar (öyle bir görünüm denetleyicisi):

class LessonListController: UIViewController { 
    var terms : [Term] 
    // var terms : NSArray 
    init(terms data:NSArray) { 
     let arr = data.sortedArrayUsingDescriptors([NSSortDescriptor(key: "lessonSection", ascending: true)]) 
     self.terms = arr as! [Term] 
     // self.terms = arr 
     super.init(nibName:"LessonList", bundle:nil) 
    } 
    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
    @IBAction func doDismiss(sender: AnyObject) { 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 
} 

Eğer (Bir yayın oluşturma olarak) biz Bu görüş kontrolcüsünü sunun ve sonra onu reddedin, işten atıldığımızı görürüz - dürüstlüğümde, bu benim teorimin bellek yönetimi ile ilgili bir problem olduğunu kanıtlıyor.

kodu izole olması, çeşitli alternatifler denemek başardı. O (Swift dealloc yılında kaputun altında yapıyor tek şey bu dizi bırakmadan olması nedeniyle) sorun var terms : [Term] özellik olduğu açıktır. Bu özelliğin değeri, benim init görebileceğiniz gibi, (sortedArrayUsingDescriptors 'si) Kakao gelmiştir ve bir Swift diziye döküm edilmiş bir NSArray olduğunu. Deneme yanılma ile, ben keşfettim: özellik (yorumladı aşımı alternatif hatlar bakınız) NSArray böylece biz uygulanmasını değiştirirsek, kaza değil

  • .

  • Ya da, (bu NSArray Kakao gelmiyor ki) sıralama yoksa, biz kaza değil.

  • Veya self.terms = arr as! [Term]'u self.terms = arr as NSArray as! [Term] ile değiştirirsek, kilitlenmeyiz!

Ama bu üçüncü alternatif

bir çözüm olduğunu. Ben as! [SomeType] atmalarını arayan tüm uygulamalarımdaki tüm kodu ile gitti ve as NSArray as [SomeType] ile hepsini yerini ve tüm çöker gitti !!

Teorim şey sadece bir NSArray Kakao itibaren gelen ve bizim kod bunun elde edebilirler önce [AnyObject] bizim için köprülenmifltir çok özel bir durumda optimize Yayın yapı içinde Swift'in bellek yönetimi ile ters gidiyor olmasıdır . Böyle bir NSArray köprüyü doğru şekilde geçmiyor.Ancak NSArray'a döküm yaparak ve daha sonra belirli bir [SomeType] Swift dizisine geri dönerek sorun çözüldü.

Doğal olarak, Apple rakamlar bunu, onlar bunu düzeltmek ve edeceğiz zaman sonra bu geçici çözümü kullanmayı bırakabilirsiniz varsayılmaktadır. Ancak o zamana kadar, uygulamalarım bir kez daha Sürüm sürümünde yayınlanıyor.

+0

Ve hata raporu numarası 19835848. olduğunu Yani kendi uygulamalardaki görüyoruz ve bunu rapor etmek istiyorum isterseniz, benim rapora başvurabilirsiniz. – matt

+1

bu da bana bir String ile gerçekleşir. Henüz bir çözüm bulamadım – alexdd55

+0

@ alexdd55 Sorunun Dize sürümü hakkında duydum ama görmedim. İsterdim. Tekrarlanabilir bir vakanız var mı? (Ve Apple ile bir hata raporu yayımlandı var?) – matt