私はこの奇妙なクラッシュに直面していますが、ログはあまり役に立ちません。
MapViewController アプリケーションにアクセスすると、viewDidAppear でクラッシュし、ログにランダムなエラーが表示されます。
ストーリーボードと自動レイアウトを使用しています。クラッシュ責任コントローラには、フルスクリーン マップ (iPad)、多数の UIbuttons、4 つのコンテナ コントローラ、および popover コントローラがあります。
インターフェイス/ストーリーボードのエラーに関するログはあまり正確ではないため、表示されるエラーはランダムだと思いますが、これは単なる提案です。
このバグは私を夢中にさせています。ランダムに発生し、理由がわかりません。アプリが 20 回連続してビルドされて完全に動作することもあれば、常にエラーが発生してクラッシュすることもあります。
私が得るエラーのいくつかは次のとおりです。
error: address doesn't contain a section that points to a section in a object file
また
Assertion failed: (scalar != 0), function -[NSISLinearExpression scaleBy:],
file /SourceCache/Foundation/Foundation-
993/Layout.subproj/IncrementalSimplex/NSISLinearExpression.m, line 244.
また
*** Terminating app due to uncaught exception 'NSGenericException',
reason: '*** Collection <__NSSetM: 0x1f597610> was mutated while being enumerated.'
また
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x1f57d480 UIView:0x2003ffa0.trailing == UIView:0x1f579230.trailing>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2013-05-31 11:12:30.320 RMT Anas Plus[2543:907] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this: (1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand,
refer to the documentation for the UIView property
translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x20089640 h=--& v=--& H:[UIView:0x1f579230(748)]>",
"<NSLayoutConstraint:0x1f57d480 UIView:0x2003ffa0.trailing == UIView:0x1f579230.trailing>",
"<NSLayoutConstraint:0x1f57d400 H:|-(944)-[UIView:0x2003ffa0] (Names: '|':UIView:0x1f579230 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x1f57d480 UIView:0x2003ffa0.trailing == UIView:0x1f579230.trailing>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
助けてくれてありがとう!
編集:
コードを使用してアプリケーションの初期ビュー コントローラーをプログラムで選択し、セッション ファイルが既にある場合はログイン ウィンドウをバイパスします。
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MapView" bundle:nil];
UIViewController *viewController;
tokeN = [[LoginToken alloc]init];
NSArray *dirArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [NSString stringWithFormat:@"%@/token.json", [dirArray objectAtIndex:0]];
if ([[NSFileManager defaultManager] fileExistsAtPath:path]==YES) {
NSData* data = [NSData dataWithContentsOfFile:path];
self.token = [[LoginToken alloc]init];
self.token = [AnasParsers createToken:data];
float timeStamp = [[NSDate date] timeIntervalSince1970];
float expiringDate = [self.token.timeStamp floatValue];
NSLog(@"now = %f expire = %f",timeStamp,expiringDate);
if (timeStamp < expiringDate) {
viewController = [storyboard instantiateViewControllerWithIdentifier:@"map"];
}
else {
[[NSFileManager defaultManager] removeItemAtPath:path error:NULL];
self.token = nil;
viewController = [storyboard instantiateViewControllerWithIdentifier:@"login"];
}
}
else {viewController = [storyboard instantiateViewControllerWithIdentifier:@"login"];}
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];