2013-02-19 18 views
5

"[MFMailComposeViewController canSendMail]" araması yaptıktan sonra garip bir çöküş görüyorum.MFMailComposeViewController neden çöküyor?

Yeniden üretemiyorum, iTunesConnect'ten. Bu yöntem (canSendMail) ana iş parçacığından çağrılıyor ve bu noktada, adres defteri ile hiçbir şey yapmıyorum.

Herhangi bir fikir/öneri ÇOK ÇOK değerli olacaktır.

Şimdiden teşekkürler!

Not: Bu, iOS 5.1.1'de gerçekleşmiştir.

Exception Type: SIGABRT 
Exception Codes: #0 at 0x3583232c 
Crashed Thread: 0 

Thread 0 Crashed: 
0 libsystem_kernel.dylib    0x3583232c __pthread_kill + 8 
1 libsystem_c.dylib     0x347e729f abort + 95 
2 AppSupport       0x3133cc57 abortAfterFailingIntegrityCheck + 39 
3 AppSupport       0x3133ceef runIntegrityCheckAndAbort + 535 
4 AppSupport       0x3133d025 checkResultWithStatement + 113 
5 AppSupport       0x3133ea13 _connectAndCheckVersion + 1059 
6 AppSupport       0x3133eab7 CPSqliteDatabaseConnectionForWriting + 43 
7 AppSupport       0x3133eb8d CPSqliteDatabaseRegisterFunction + 21 
8 AddressBook       0x337873f7 ABCDBContextCreateWithPathAndAddressBook + 215 
9 AddressBook       0x3377b429 ABCCreateAddressBookWithDatabaseDirectoryAndForceInProcessMigrationInProcessLinkingAndResetSortKeys + 233 
10 AddressBook       0x33789cd7 ABAddressBookCreate + 15 
11 Message        0x31072453 MFThreadLocalAddressBook + 87 
12 MessageUI       0x313a5471 +[MFMailComposeController initialize] + 9 
13 libobjc.A.dylib      0x35edc973 _class_initialize + 239 
14 libobjc.A.dylib      0x35edc87b prepareForMethodLookup + 143 
15 libobjc.A.dylib      0x35edc747 lookUpMethod + 47 
16 libobjc.A.dylib      0x35edc713 _class_lookupMethodAndLoadCache3 + 19 
17 libobjc.A.dylib      0x35edbfcb objc_msgSend_uncached + 27 
18 MessageUI       0x313a5455 +[MFMailComposeViewController canSendMail] + 33 

=============

GÜNCELLEME:

-(IBAction)helpButtonPressed 
{ 
    if([MFMailComposeViewController canSendMail]) 
    { 
     NSString* mail = self.feedbackSettings[@"mail"]; 
     NSString* title = self.feedbackSettings[@"title"]; 

     MFMailComposeViewController* mailComposer = [[MFMailComposeViewController alloc] init]; 
     mailComposer.mailComposeDelegate = self; 
     mailComposer.toRecipients = @[ mail ]; 
     mailComposer.subject = title; 

     [self presentViewController:mailComposer animated:YES completion:nil]; 
     [mailComposer release], mailComposer = nil; 
    } 
    else 
    { 
     [UIAlertView showAlertViewWithTitle:nil message:NSLocalizedString(@"Please, setup a mail account in your phone first.", nil) buttonTitle:NSLocalizedString(@"OK", nil)]; 
    } 
} 
+0

Size 'canSendEmail'' NO' döndüğünde 'MFMailComposeViewController' sunmaya çalışıyor olabilir ki. – jamapag

+0

'MFMailComposeViewController' oluşturduğunuzda kod parçası ekleyebilir misiniz? – jamapag

+0

Hayır, canSendEmail NO olduğunda MFMailComposeViewController'ı sunmaya çalışmıyorum. Soruyu güncelleyeceğim, teşekkürler. –

cevap

7

I:

bu çökmesine neden olan kod bloğu şudur kısa bir süre önce iOS 5 kullanan bir müşteriden, bunun aslında bir kopyası olan bir kilitlenme raporu gördü. En iyi tahminim, bozuk bir adres defteri veritabanının neden olduğu. Çarpmanın ABAddressBookCreate numaralı telefona çağrıldığına dikkat edin (bu yanıltıcı bir addır; daha açıktır); Bunu yapabilmen gereken bir şey yok.

Adres defteri üzerinde denetiminiz varsa ve bunları bir yerde eşitliyorsanız, eşitlemeyi kapatabilir, tüm kişileri sildikten sonra tekrar senkronize etmeyi deneyebilirsiniz (elbette, önce yedekleme). Muhtemelen kullanıcıya To: adreslerini sunmak için adres defterine erişiyordur.

[Nit. Eğer bir işlev çıkmak hemen önce bir otomatik değişken nil'ing içinde pek noktası]

+1

Yazma zaman ayırdığınız için teşekkürler! Evet, aynı şeyi düşündüm, bozuk bir Adres Defteri gibi görünüyor. (Hayır, senkronizasyon yapıyorum). İlişkin nil'ing değişkenleri, haklısın, ama bazı diğer geliştirici kodunuzu genişletmek ve * potansiyel * bayan bırakma olacağı örtük riski her zaman vardır !. –

4

Sadece burada bazı veri eklemek için, bu kontrolünüz dışında bulunuyor şey gibi görünüyor. Canlı bir uygulamadan gelen kilitlenme verileri, on binlerce kullanıcının 11 kullanıcısına aynı çökmeyi gösterir. Tüm çökmeler iOS 5.1 ve 5.1.1'in bazı lezzeti içinde oluştu, bu yüzden sorun iOS 6'da çözülüyor gibi görünüyor.

Başka bir yanıtta belirtildiği gibi, @try { } bloğunda aramayı [MFMailComposeViewController canSendMail] bloğuna sarabilirsiniz, ve bir istisna atarsa ​​hiçbir şey yapmayın. Bu, en azından bozuk adres defterlerine sahip olan kullanıcıların çökmesine engel olur.

+0

Sorulacak daha spesifik olabilir. – tuxnani

+0

Aynı zamanda Crashlytics'te bunu görüyorum ve gerçekten de, çöken herkes iOS 5.1 veya 5.1.1'de. – Pascal

3

Bu iOS 5'de iOS 6'da giderilen bir hatadır. IOS 5 cihazlarda "sabit" edilemez ve sizin hatanız değildir. İşte

... Ben hallederim için ne olduğunu

Ne benim kod geçici bir try/catch konur yapılır ve ettik bu istisna yakalanması halinde, ben de:

A: Kullanıcı iOS 6'ya yükseltilemeyen bir aygıtta (bu listedeki daha eski ve NOT: http://ipod.about.com/od/iPhoneQandA/f/What-Devices-Are-Ios-6-Compatible.htm) bir aygıtta ise, Apple tarafından denetlenemediğimiz veya düzeltemediğimiz bir hatayla karşılaştığımıza dair bir iletişim kutusu açarsanız, ve sadece yeni bir iOS cihazı bu sorunu düzeltir.

VEYA

B: kullanıcı iOS 6 yükseltilebilir CAN bir cihaz kullanıyorsa, kullanıcıların bu hata hakkında bildirir ve gelecekte sorunu çözmek için iOS 6'ya yükseltmek için onları talimatını veren bir iletişim pop . en iyi şekilde bu kolları

Umarım.

+0

Yardımlarınız için teşekkürler Ethan. IOS 5 desteğini birkaç hafta içinde düşürmek üzereyiz, bu da işleri daha da kolaylaştırır !. –

+0

Merhaba, hatanın ne olduğu hakkında bir bilginiz var mı? Ayrıca, Jorge ve benzer sorunları olan diğerleri gibi ben de kendim Adres Defteri kullanmıyorum - bu istisna işlemlerini nereye koydunuz? – David

+0

@ethan, Apple'dan bu iOS 5 hatasında herhangi bir belge veya doğrulama bulmaya çalışıyorum. Bana bir şey gösterebilir misin? – XJones

İlgili konular