Có, cả hai trường hợp có thể xảy ra.
Khi gặp sự cố, bạn có thể sử dụng UncaughtExceptionHandler để thực hiện một số mã. Trong bạn đại biểu ứng dụng, đăng ký, bạn xử lý như thế này:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
// Other didFinishLaunchingWithOptions code
Và thêm phương pháp xử lý của mình vào cùng một tập tin .m
void uncaughtExceptionHandler(NSException *exception)
{
// App crashed, save last selected tabbar index to the to the NSUserDefaults
[[NSUserDefaults standardUserDefaults] setInteger:tabBarController.selectedIndex forKey:@"LastSelectedTabbarIndex"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
Trong khi ứng dụng chạy, để theo dõi các thanh tab chọn cuối cùng điều khiển, sử dụng UITabBarControllerDelegate
và lưu chỉ mục của thanh tab mới được chọn thành NSUserDefaults
. Ví dụ ngắn:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSUInteger tabIndex = [[tabBarController viewControllers] indexOfObject:viewController];
// I have newly selected index, now save it to the NSUserDefaults
}
Mã này sẽ lưu chỉ mục của thanh tab được chọn cuối cùng vào số NSUserDefaults
thay đổi chỉ mục được chọn của thanh tab mỗi lần. chỉ số chọn
Cuối cùng, khi bạn ứng dụng bắt đầu (trong didFinishLaunchingWithOptions
của bạn), đọc qua lưu chỉ số thanh tabbar từ NSUserDefaults
và thiết lập thanh tabbar của phù
self.tabBarController.selectedIndex = lastSelectedIndexFromDefaults;
Edit: Nếu bạn cũng cần phải khôi phục UINavigationController
s điều khiển ngăn xếp, nhiệm vụ khá khó khăn của nó. Tôi cung cấp cho bạn chỉ là một tổng quan nhanh chóng những gì đến với tâm trí của tôi.
Có 2 trường hợp:
- Bạn có tùy chỉnh xem điều khiển initializers và cần phải vượt qua tùy chỉnh đối tượng cho những bộ điều khiển - Trong trường hợp này, nó gần không thể (trong một số thời gian hợp lý) thực hiện điều này
- Bạn chỉ sử dụng
-init
hoặc -initWithNibName...
: để khởi tạo bộ điều khiển chế độ xem trong ngăn điều hướng. Bạn có thể liệt kê các bộ điều khiển từ thư mục gốc UINavigationController
của tab, nhận tên lớp học bằng cách sử dụng NSStringFromClass
và lưu chúng vào NSUserDefaults
. Trên các ứng dụng bắt đầu, bạn sẽ đảo ngược thủ tục (khởi tạo bộ điều khiển bằng cách sử dụng các chuỗi tên của chúng được đọc từ NSUserDefaults
sử dụng một cái gì đó như thế này: UIViewController *vc = [[NSClassFromString(@"aa") alloc] init];
).
nhờ trả lời ý tưởng của bạn là tốt, nhưng tôi lo lắng bout làm thế nào để quản lý tất cả các ứng dụng của tôi với navigaiton + tabbar và cũng có hai loại quản trị đăng nhập và sử dụng ..? Vậy làm thế nào để quản lý điều này cộng với LoginScreen ... và phiên và người dùng liên quan của nó ..? –
Woohh tôi nghĩ bạn sẽ phải tạo một lớp (được tuần tự hóa) và sau đó trong đó lưu tất cả các thông tin cần thiết như loại tài khoản, chỉ mục tab, viewcontroller. lưu nó trong mặc định của người dùng như nsdata – amar