iOS - 重新打开应用程序时不显示 NSUserDefaults 可变数组

标签 ios objective-c nsmutablearray nsuserdefaults

这是我的mainAppDelegate.h:

#import <UIKit/UIKit.h>

@interface mainAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property NSMutableArray *toDoItems;

@end

和我的mainAppDelegate.m:

#import "mainAppDelegate.h"

@implementation mainAppDelegate

- (void)applicationWillTerminate:(UIApplication *)application
{
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    [defaults setObject:self.toDoItems forKey:@"toDoItems"];
    [defaults synchronize];
}
@end

我有另一个文件,XYZToDoListViewController.m,代码为:

#import "XYZToDoListViewController.h"
#import "XYZToDoItem.h"
#import "XYZAddItemViewController.h"

@interface XYZToDoListViewController ()
@property NSMutableArray *toDoItems;
@end

@implementation XYZToDoListViewController

- (IBAction)unwindToList:(UIStoryboardSegue *)segue
{
    XYZAddItemViewController *source = [segue sourceViewController];
    XYZToDoItem *item = source.toDoItem;
    if (item != nil) {
        [self.toDoItems addObject:item];
        [self.tableView reloadData];
    }
}

- (IBAction)clearData:(UIBarButtonItem *)sender;
{
    [self.toDoItems removeAllObjects];
    [self.tableView reloadData];
}

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {

}
return self;
}

   NSUserDefaults *defaults= [NSUserDefaults standardUserDefaults];
   if([[[defaults dictionaryRepresentation] allKeys] containsObject:@"toDoItems"]){
       NSLog(@"toDoItems found");
       self.toDoItems = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"toDoItems"]];
   } else {
      self.toDoItems = [[NSMutableArray alloc] init];
   }
   self.navigationController.view.backgroundColor =
   [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg_full.png"]];
   self.tableView.backgroundColor = [UIColor clearColor];
   self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, -35, 0);
   }
   @end

至少我认为这是相关的。我的基本框架是我遵循的 this tutorial.

我做错了什么?当我将项目添加到我的待办事项列表中时,终止应用程序,然后重新启动应用程序,我之前输入的数据不显示。项目没有错误或警告,也没有崩溃。

最佳答案

applicationWillTerminate: 没有被调用我假设,将 userdefault synchronize 代码放在其他地方。 顺便说一句,当您重新启动调试器时,进程只是被杀死,而不是“终止”。

这就是为什么我通常在每次数据更改时调用 synchronize,以确保在发生崩溃时或在我重新启动调试器时保存数据。

关于iOS - 重新打开应用程序时不显示 NSUserDefaults 可变数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23139944/

相关文章:

ios - 如何暂停uiview动画?

ios - UILabel:背景相关颜色

objective-c - 访问数组中的元素 - 请求非结构或联合中的成员

ios - 模拟器崩溃 "[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'”

ios - 新 iOS 应用程序的旧设备兼容性

ios - 带有 NSError 的 Objective C 到 Swift 完成语法

ios - Shopify 网站仅在 Ipad 的右侧提供空白

Swift NSManagedObjects 不支持 mutableSetValueForKey

ios - 如何覆盖此 Swift 属性?

ios - 当没有足够的空间来使用自动布局显示全文时隐藏 UILabel