2

私のコードは次のようになります。

CGRect screenRect = [[UIScreen mainScreen] bounds];
SomeView *infoView;
if(screenRect.size.height != 568.0){
    // iPhone 5/5s users crash in the next line
    infoView = [[[NSBundle mainBundle] loadNibNamed:@"SomeViews" owner:self options:nil] objectAtIndex:1];  
}else{
    infoView = [[[NSBundle mainBundle] loadNibNamed:@"SomeViews" owner:self options:nil] objectAtIndex:0]
}

ただし、上記のコードのコメントとして、Crashlytics から iPhone 5/5s ユーザー向けのクラッシュ レポートを取得しています。

私のアプリは縦向きのみをサポートしているため、5/5 秒で高さが 568 ではないことに驚きました。何百人ものアクティブ ユーザーがいますが、4 人のユーザーで発生したクラッシュは 12 回だけです。

また、iPhone 5/5s デバイスが間違ったペン先 (3.5 インチ スクリーン用) をロードしても、クラッシュすることはありません。(私はちょうどテストしました。)

http://crashes.to/s/1ddc169b801

Crashlytics は、クラッシュの 90% がジェイルブレイク デバイスで発生していることも示しました。

Fatal Exception: NSInvalidArgumentException
-[UIDeviceRGBColor superview]: unrecognized selector sent to instance 0x14732db0

0
CoreFoundation  
__exceptionPreprocess + 130
1
libobjc.A.dylib 
objc_exception_throw + 38
2
CoreFoundation  
-[NSObject(NSObject) doesNotRecognizeSelector:] + 202

...

22
UIKit   
-[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 138
23
Banck   
BKAddRecordPagingViewController.m line 244 // line 244 is loadNibNamed
-[BKAddRecordPagingViewController viewDidLoad]

クラッシュ レポートのリンクに理由が示されていますが、nib ファイルで組み込みの UILabel、UIImageView、UITextView のみを使用しているため、理由がわかりません。

脱獄デバイスで4インチの画面を使用しているかどうかを確認するためのアドバイスを誰かに教えてもらえますか? 2 番目の質問は、loadNibNamed 内でのクラッシュの原因は何ですか?

4

3 に答える 3

2

Cydia Tweak "Eclipse" にはオーバーリリースのバグがあると思われます。(Eclipse.dylib はクラッシュ トレースに表示されます)

NIB から UIView のインスタンスが解放され、メモリがUIDeviceRGBColorインスタンスに再利用されます。

Cydia Eclipse アドオンで再現できるか確認してみてください。Instrumentsで割り当てを追跡できます。

于 2014-03-12T18:16:05.740 に答える