iOS即使应用程序关闭也如何存储数据

时间:2014-07-24 08:03:00

标签: ios variables

我正在做一个iOS应用程序。目标是发送用户的建议,以改善我建议的服务。

该应用是一款原生应用。我想创建一个全局的NSMutableArray,我存储所有的建议。问题是我的设备无法连接到互联网。 有两种情况: 如果在用户发送他的建议时连接了设备,则会发送。 如果没有,建议将保存在我的NSMutableArray中并稍后发送。

是否可以创建一个存储我所有建议的全局变量?如果我的应用程序崩溃/关闭,则此变量无法解除分配/重置。 单身是否足以做到这一点?

4 个答案:

答案 0 :(得分:1)

首先检查你设备的互联网状态。如果状态已连接,则发送未连接的array.if状态,然后将数组保存到NSUserDefaults.To保存建议数组

 NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
 NSMutableArray * suggestions = [[NSMutableArray alloc] init];
 [defaults  setObject: suggestions forKey:@"suggestions"];

访问这些建议

 NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
 NSMutableArray * suggestions = [[NSMutableArray alloc]initWithArray:[defaultsobjectForKey:@"suggestions"]];

答案 1 :(得分:0)

单身是不够的,因为如果您的应用被杀或崩溃,您将丢失所有数据。 如果只有少数建议并且它们很短,最简单的方法是将它们保存在UserDefaults中。 如果要使用长文本和多个字段保存太多建议,则需要实现数据库。核心数据可以很好地解决您的问题。

答案 2 :(得分:0)

一种简单的(单行代码)方法是使用plists和命令

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
在NSArray上

来自说明:

  

将数组的内容写入给定路径的文件。   如果数组的内容都是属性列表对象(NSString,NSData,NSArray或NSDictionary对象),则此方法编写的文件可用于使用类方法arrayWithContentsOfFile:或实例方法initWithContentsOfFile:初始化新数组。在写出文件之前,此方法以递归方式验证所有包含的对象是属性列表对象,如果所有对象都不是属性列表对象,则返回NO,因为生成的文件不是有效的属性列表。

在您的示例中,您将拥有(说)NSArray的NSDrray,其中每个NSDictionary都包含这些建议。如果没有网络可用性,调用writeToFile会将其写出来。然后(比如应用前台事件)你会读取文件(arrayWithContentsOfFile调用)。如果有任何内容,您会尝试再次推送到服务器。

答案 3 :(得分:0)

您可以使用NSUserDefaults

//write to NSUserDefaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSNumber numberWithInteger:userRatingInteger] forKey:@"userRating"];
[defaults synchronize];

//read from NSUserDefaults
NSNumber *userRatingNumber = [defaults objectForKey:@"userRating"];
if (userRatingNumber) { // the user has rated.
    // Use the value as needed.
}