我重视这个网站上的意见,想知道你们的想法。我有一个包含数组的应用程序。此数组用于多个视图控制器。目前,每次打开一个视图控制器时,我都会创建该数组。我不相信这是最好的事情。我之前使用过NSUserDefaults和单身,但我对你有任何想法,plist等等持开放态度。我正在寻求让事情快速有效地运行。
另外,我希望用户能够重新排列阵列。让我们说它从alpha顺序开始。但是用户发现以其他方式重新排列它更好。我知道怎么做,重新排列,但我想知道在哪里保留原始数组,以便用户可以将命令重置回原始的alpha顺序。
所以我猜这个问题是双重的。存储原始数组的位置,以及如何最好地在整个应用程序中访问更改的数组。非常感谢你的帮助。
编辑#1
我要感谢大家的意见和答案!我认为这就是社区的意义所在。学习新的和不同的技术是很棒的。我将尝试尝试所有的答案(看看我是否可以实际编程),看看哪一个最适合我。再次感谢这次出色的对话。
编辑#2
我最终做了两件事,如果没有你的所有评论和答案,我绝不会这样做。我在app delegate中创建了数组并将其保存在用户默认值中。它不是一个基本数组,它是一个自定义对象数组,所以我不得不使用一些NSCoding。它也不只是alpha排序,所以我制作了一个可以操作的数组。再一次,感谢所有伟大的见解!
答案 0 :(得分:2)
您可以在AppDelegate中创建它的单例实例。 在AppDelegate.h中为数组创建一个@property,然后将该标头导入到其他viewControllers中。
将数组初始化并存储到“didLoadWithOptions”中的appDelegate的数组@property中。您可以创建自定义getter / setter以允许操作。实际数据可能来自外部XML,JSON或plist文件,但为了测试,您只需在AppDelegate中对数组进行硬编码即可。
每个viewController都需要使用描述in this answer的方法来引用appDelegate。然后,您可以像访问任何其他属性一样访问1数组,
NSArray *dataInVC = myAppDelegate.singletonArray;
(...或者如果要添加/更改/操作,则使用NSMutableArray。)
...或者,只需为您的数据创建一个单独的类,并创建它的单例版本,以便以后可以在必要时更轻松地重构。如何执行此操作的示例in this answer
答案 1 :(得分:1)
我建议将数组存储在您的app委托中。此解决方案的一个优点是您的应用程序委托已经是单例。
在app delegate头文件中创建NSMutableArray
属性。在app delegate didFinishLaunchingWithOptions:
方法中初始化并填充数组。
使用以下代码从任何地方访问它:
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
// appDelegate.myArray holds your values
更进一步,将其添加到Prefix.pch文件中:
#import "MyAppDelegate.h"
#define appDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)
然后可以简化之前的代码,只需从任何地方调用appDelegate.myArray
。
您可以在应用委托实施中创建处理数组上的排序和其他操作的方法。如果您在app delegate头文件中声明这些方法,您也可以在应用程序的任何位置通过以下方式调用它们:
[appDelegate doStuff:parameter];
答案 2 :(得分:1)
当您从五个不同的地方访问数据时,很快就会混淆地来回发送数据。具有存储数组的公共属性的单例类将是解决此问题的好方法。
如果您想将数据保存到磁盘,NSUserDefaults
将是更好的选择。
以下是如何使用NSUserDefaults
来执行此操作的方法。保存数据:
[[NSUserDefaults standardUserDefaults] setObject:originalArray forKey:@"OriginalArray"];
[[NSUserDefaults standardUserDefaults] setObject:modifiedArray forKey:@"ModifiedArray"];
检索数据:
NSMutableArray *modifiableArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"ModifiedArray"].mutableCopy;
请勿忘记在适当的时候拨打[NSUserDefaults synchronize]
将数据保存到磁盘。