From 9eb746a7a0b37e21ad591975ea988ab3ad2a13c4 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Fri, 31 Mar 2017 13:44:43 -0400 Subject: [PATCH] Fix crash when viewing changed safety numbers Instantiate fingerprintVC programmatically since MVC was not built from the storyboard and thus doesn't have it's storyboard-defined segues. // FREEBIE --- Signal/src/Storyboard/Main.storyboard | 13 ++--- .../ViewControllers/MessagesViewController.m | 48 +++++++------------ 2 files changed, 21 insertions(+), 40 deletions(-) diff --git a/Signal/src/Storyboard/Main.storyboard b/Signal/src/Storyboard/Main.storyboard index 908649436..7c4a95dac 100644 --- a/Signal/src/Storyboard/Main.storyboard +++ b/Signal/src/Storyboard/Main.storyboard @@ -1,11 +1,11 @@ - - + + - + @@ -120,9 +120,6 @@ - - - @@ -1461,8 +1458,6 @@ - - - + diff --git a/Signal/src/ViewControllers/MessagesViewController.m b/Signal/src/ViewControllers/MessagesViewController.m index 67e014e21..b5841f12c 100644 --- a/Signal/src/ViewControllers/MessagesViewController.m +++ b/Signal/src/ViewControllers/MessagesViewController.m @@ -76,9 +76,6 @@ static NSTimeInterval const kTSMessageSentDateShowTimeInterval = 5 * 60; -static NSString *const OWSMessagesViewControllerSegueShowFingerprint = @"fingerprintSegue"; -static NSString *const OWSMessagesViewControllerSeguePushConversationSettings = @"OWSMessagesViewControllerSeguePushConversationSettings"; - NSString *const OWSMessagesViewControllerDidAppearNotification = @"OWSMessagesViewControllerDidAppear"; typedef enum : NSUInteger { @@ -819,7 +816,20 @@ typedef enum : NSUInteger { OWSFingerprint *fingerprint = [builder fingerprintWithTheirSignalId:theirSignalId theirIdentityKey:theirIdentityKey]; [self markAllMessagesAsRead]; - [self performSegueWithIdentifier:OWSMessagesViewControllerSegueShowFingerprint sender:fingerprint]; + + NSString *contactName = [self.contactsManager displayNameForPhoneIdentifier:theirSignalId]; + + UIViewController *viewController = + [[UIStoryboard main] instantiateViewControllerWithIdentifier:@"FingerprintViewController"]; + if (![viewController isKindOfClass:[FingerprintViewController class]]) { + OWSAssert(NO); + DDLogError(@"%@ expecting fingerprint view controller, but got: %@", self.tag, viewController); + return; + } + FingerprintViewController *fingerprintViewController = (FingerprintViewController *)viewController; + + [fingerprintViewController configureWithThread:self.thread fingerprint:fingerprint contactName:contactName]; + [self presentViewController:fingerprintViewController animated:YES completion:nil]; } #pragma mark - Calls @@ -1328,9 +1338,9 @@ typedef enum : NSUInteger { DDLogDebug(@"%@ Ignoring request to show conversation settings, since user left group", self.tag); return; } - - OWSConversationSettingsTableViewController *settingsVC = [[UIStoryboard storyboardWithName:AppDelegateStoryboardMain bundle:NULL] - instantiateViewControllerWithIdentifier:@"OWSConversationSettingsTableViewController"]; + + OWSConversationSettingsTableViewController *settingsVC = + [[UIStoryboard main] instantiateViewControllerWithIdentifier:@"OWSConversationSettingsTableViewController"]; [settingsVC configureWithThread:self.thread]; [self.navigationController pushViewController:settingsVC animated:YES]; } @@ -1846,30 +1856,6 @@ typedef enum : NSUInteger { [self presentViewController:actionSheetController animated:YES completion:nil]; } -#pragma mark - Navigation - -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - if ([segue.identifier isEqualToString:OWSMessagesViewControllerSegueShowFingerprint]) { - if (![segue.destinationViewController isKindOfClass:[FingerprintViewController class]]) { - DDLogError(@"%@ Expected Fingerprint VC but got: %@", self.tag, segue.destinationViewController); - return; - } - FingerprintViewController *vc = (FingerprintViewController *)segue.destinationViewController; - - if (![sender isKindOfClass:[OWSFingerprint class]]) { - DDLogError(@"%@ Attempting to segue to fingerprint VC without a valid fingerprint: %@", self.tag, sender); - return; - } - OWSFingerprint *fingerprint = (OWSFingerprint *)sender; - - NSString *contactName = [self.contactsManager displayNameForPhoneIdentifier:fingerprint.theirStableId]; - [vc configureWithThread:self.thread fingerprint:fingerprint contactName:contactName]; - } else { - DDLogDebug(@"%@ Received segue: %@", self.tag, segue.identifier); - } -} - - #pragma mark - UIImagePickerController /*