Handle store loading errors.
[ADDED] Detect store loading errors and attempt to recover.
This commit is contained in:
parent
21c0565619
commit
c8f9f79bb2
2
External/iCloudStoreManager
vendored
2
External/iCloudStoreManager
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 303b3a3e5c092c21d8e0c92cbe9145b6492b6c7b
|
Subproject commit b456a34975e65fba8e2228b790706d852188ecb2
|
@ -13,17 +13,7 @@
|
|||||||
|
|
||||||
static NSDateFormatter *rfc3339DateFormatter = nil;
|
static NSDateFormatter *rfc3339DateFormatter = nil;
|
||||||
|
|
||||||
- (void)loadRFC3339DateFormatter {
|
#pragma mark - Core Data setup
|
||||||
|
|
||||||
if (rfc3339DateFormatter)
|
|
||||||
return;
|
|
||||||
|
|
||||||
rfc3339DateFormatter = [NSDateFormatter new];
|
|
||||||
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
|
|
||||||
[rfc3339DateFormatter setLocale:enUSPOSIXLocale];
|
|
||||||
[rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
|
|
||||||
[rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
|
|
||||||
}
|
|
||||||
|
|
||||||
+ (NSManagedObjectContext *)managedObjectContext {
|
+ (NSManagedObjectContext *)managedObjectContext {
|
||||||
|
|
||||||
@ -124,11 +114,6 @@ static NSDateFormatter *rfc3339DateFormatter = nil;
|
|||||||
return storeManager;
|
return storeManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSManagedObjectContext *)managedObjectContextForUbiquityStoreManager:(UbiquityStoreManager *)usm {
|
|
||||||
|
|
||||||
return self.managedObjectContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)saveContext {
|
- (void)saveContext {
|
||||||
|
|
||||||
[self.managedObjectContext performBlock:^{
|
[self.managedObjectContext performBlock:^{
|
||||||
@ -184,6 +169,37 @@ static NSDateFormatter *rfc3339DateFormatter = nil;
|
|||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - UbiquityStoreManagerDelegate
|
||||||
|
|
||||||
|
- (NSManagedObjectContext *)managedObjectContextForUbiquityStoreManager:(UbiquityStoreManager *)usm {
|
||||||
|
|
||||||
|
return self.managedObjectContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)ubiquityStoreManager:(UbiquityStoreManager *)manager log:(NSString *)message {
|
||||||
|
|
||||||
|
dbg(@"StoreManager: %@", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)ubiquityStoreManager:(UbiquityStoreManager *)manager didEncounterError:(NSError *)error cause:(UbiquityStoreManagerErrorCause)cause context:(id)context {
|
||||||
|
|
||||||
|
err(@"StoreManager: cause=%d, context=%@, error=%@", cause, context, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Import / Export
|
||||||
|
|
||||||
|
- (void)loadRFC3339DateFormatter {
|
||||||
|
|
||||||
|
if (rfc3339DateFormatter)
|
||||||
|
return;
|
||||||
|
|
||||||
|
rfc3339DateFormatter = [NSDateFormatter new];
|
||||||
|
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
|
||||||
|
[rfc3339DateFormatter setLocale:enUSPOSIXLocale];
|
||||||
|
[rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
|
||||||
|
[rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
|
||||||
|
}
|
||||||
|
|
||||||
- (MPImportResult)importSites:(NSString *)importedSitesString withPassword:(NSString *)password
|
- (MPImportResult)importSites:(NSString *)importedSitesString withPassword:(NSString *)password
|
||||||
askConfirmation:(BOOL(^)(NSUInteger importCount, NSUInteger deleteCount))confirmation {
|
askConfirmation:(BOOL(^)(NSUInteger importCount, NSUInteger deleteCount))confirmation {
|
||||||
|
|
||||||
|
@ -394,6 +394,37 @@
|
|||||||
[controller dismissModalViewControllerAnimated:YES];
|
[controller dismissModalViewControllerAnimated:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - UbiquityStoreManagerDelegate
|
||||||
|
|
||||||
|
- (void)ubiquityStoreManager:(UbiquityStoreManager *)manager didEncounterError:(NSError *)error cause:(UbiquityStoreManagerErrorCause)cause context:(id)context {
|
||||||
|
|
||||||
|
err(@"StoreManager: cause=%d, context=%@, error=%@", cause, context, error);
|
||||||
|
|
||||||
|
switch (cause) {
|
||||||
|
case UbiquityStoreManagerErrorCauseDeleteStore:
|
||||||
|
case UbiquityStoreManagerErrorCauseCreateStorePath:
|
||||||
|
case UbiquityStoreManagerErrorCauseClearStore:
|
||||||
|
break;
|
||||||
|
case UbiquityStoreManagerErrorCauseOpenLocalStore: {
|
||||||
|
[PearlAlert showError:@"Could not open your local database.\n\n"
|
||||||
|
@"The database may be too old. It will be deleted, the application will quit, "
|
||||||
|
@"and on the next launch a fresh database will be created." tappedButtonBlock:^(UIAlertView *alert, NSInteger buttonIndex) {
|
||||||
|
wrn(@"Local store could not be opened, deleting it.");
|
||||||
|
[[NSFileManager defaultManager] removeItemAtURL:context error:nil];
|
||||||
|
exit(0);
|
||||||
|
} otherTitles:nil];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case UbiquityStoreManagerErrorCauseOpenCloudStore: {
|
||||||
|
[PearlAlert showError:@"Could not use iCloud-synced storage. Will use a local database for now.\n\n"
|
||||||
|
@"If this problem persists, you may need to reset your Master Password database on iCloud."];
|
||||||
|
wrn(@"iCloud store could not be opened, moving to local store.");
|
||||||
|
[manager useiCloudStore:NO alertUser:NO];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - TestFlight
|
#pragma mark - TestFlight
|
||||||
|
|
||||||
|
|
||||||
|
@ -426,12 +426,12 @@
|
|||||||
break;
|
break;
|
||||||
#ifdef ADHOC
|
#ifdef ADHOC
|
||||||
case 7:
|
case 7:
|
||||||
[[MPAppDelegate get].storeManager useiCloudStore:![MPAppDelegate get].storeManager.iCloudEnabled];
|
[[MPAppDelegate get].storeManager useiCloudStore:![MPAppDelegate get].storeManager.iCloudEnabled alertUser:YES];
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
#else
|
#else
|
||||||
case 6:
|
case 6:
|
||||||
[[MPAppDelegate get].storeManager useiCloudStore:![MPAppDelegate get].storeManager.iCloudEnabled];
|
[[MPAppDelegate get].storeManager useiCloudStore:![MPAppDelegate get].storeManager.iCloudEnabled alertUser:YES];
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user