应用程序退出时保存整数 - Apple iOS
Posted
技术标签:
【中文标题】应用程序退出时保存整数 - Apple iOS【英文标题】:saving integer when app is quit - apple iOS 【发布时间】:2013-06-27 18:15:01 【问题描述】:我在下面得到了这段代码,当单击保存按钮并关闭应用程序时,它将保存一个整数,但是我需要它自动执行此操作...我如何使用 ios 执行此操作?对整个苹果编码的东西很新,所以欢迎任何帮助
-(IBAction)SaveNumber:(id)sender
[[NSUserDefaults standardUserDefaults] setInteger:Number forKey:@"savenumber"];
- (void)viewDidLoad
Number = [[NSUserDefaults standardUserDefaults] integerForKey:@"savenumber"];
ShowSavedNumber.Text = [NSString stringWithFormat:@"%i",Number];
[super viewDidLoad];
【问题讨论】:
我猜你只是想在- (void)applicationDidEnterBackground:(UIApplication *)application
的 AppDelegate 中添加那段代码。然后它将“自动”保存您想要的任何内容,而无需任何用户输入。
【参考方案1】:
问题是,您尝试将这个值保存在哪里?您没有文件可以将此值存储在应用程序内的 Documents 目录中。
您可以在应用中保存任何值,但您必须使用文件进行存储和读取,或者通过服务器上的 URL 进行保存和加载。像file.plist、SqlLight、json和mysql。
所以第一个简单的保存是在您的应用程序中使用文件.plist
,在 AppDelegate.m 下,您必须检查您的目录是否存在该文件并复制到 Documents 目录(唯一的可写文件夹)中,但在那之后您必须学习如何使用 Dictionary
、 MutableDictionary
和其他一些类来加载和保存同一个文件。我可以帮助您了解第一步,例如检查并创建 .plist、读取和第一个要保存的基础,但其他事情是代码太多,您必须观看其他教程。
所以创建一个 .plist 文件并像这样更改结构: 更改键有你想要的,但请记住字典包含更多字符串值,如果你想添加更多项,你必须在同一个根数组中添加其他行。
Root = Array
Item0 > some string with value
Item1 > some string with value
现在您必须在应用程序启动时将此文件复制到可写的 Documents 文件夹中,因此在您的 AppDelegate.m
中创建一个函数:
- (void)createPlistFile
NSError *error;
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"yourFile.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath: path])
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"yourFile" ofType:@"plist"];
[fileManager copyItemAtPath:bundle toPath: path error:&error];
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
下添加电话:[self createPlistFile];
好的,现在你已经先检查文件是否存在于文档文件夹中,如果为假,应用程序会创建一个新文件。
现在这里是在您的应用中读取新文件的标准代码:
在你的ViewControlle.h
写:
@interface ViewController : UIViewController
NSMutableArray *loadData;
@property (nonatomic, strong) NSMutableArray *loadData;
回到您的ViewController.m
并写信:
@synthesize loadData;
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"yourFile.plist"];
NSMutableArray *dataDict = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
self.loadData = dataDict;
好的,现在您已经在文档目录中创建了一个新的 PLIST 文件并正确加载,但是现在您必须保存,这是一种基本的保存方法,但是有很多模式,我不能在这里全部写出来;)
- (IBAction)save:(id)sender
NSMutableDictionary *nr2 = [[NSMutableDictionary alloc] init];
[nr2 setValue:emittente.text forKey:@"plistKey"];
[nr2 setValue:link.text forKey:@"plistKey"];
[nr2 setValue:images.text forKey:@"plistKey"];
[nr2 setValue:web.text forKey:@"plistKey"];
[YouMutableDict addObject:nr2];
[YouMutableDict writeToFile:listFav atomically:YES];
好的,我希望这可以帮助您开始了解如何在应用程序上保存数据,如果是,请投票;)
【讨论】:
【参考方案2】:对 NSUserDefaults 所做的更改不会自动保存。您必须在 NSUserDefaults 对象上调用 -synchronize 才能保存。通常,您希望在完成计划执行的所有更新后执行一次(如果实际上您需要执行多次更新)。
这是 Apple 的参考资料:http://developer.apple.com/library/ios/ipad/#documentation/cocoa/reference/foundation/Classes/NSUserDefaults_Class/Reference/Reference.html
【讨论】:
这真的让我很困惑:( 他说在你退出应用程序之前调用[[NSUserDefaults standardUserDefaults] synchronize];
来同步你的用户默认值。以上是关于应用程序退出时保存整数 - Apple iOS的主要内容,如果未能解决你的问题,请参考以下文章
iOS:Apple 是不是为保存到主屏幕的 Web 应用禁用了 HTML5 离线功能?
iOS:将图像保存在 App Group 中以在 Apple Watch 上使用