我在如何/在哪里保存我NSUserDefaults
的 forapplicationDidEnterBackground
和时遇到问题,当用户退出应用程序或进入后台时applicationWillTerminate
,我需要从另一个保存我的NSArray
计数。但我不知道我是否会保存正确的,因为当我删除它时我的计数正在更新。我无法将其保存在和上。希望有人会帮忙。谢谢你。NSUserDefaults
UIViewController
integer
NSArray
UIView
viewDidLoad
viewDidAppear
4 回答
如果您需要从另一个 ViewController 保存,那么最好添加NSMutableArray
appDelegate。每当您删除或添加对象时,请保存数组的计数,因为它将像这样覆盖:
[[NSUserDefaults standardUserDefaults] setInteger:[yourArray count] forKey:@"Count"];
[[NSUserDefaults standardUserDefaults] synchronize];
像这样检索:
NSInteger count = [[NSUserDefaults standardUserDefaults] integerForKey:@"Count"];
编辑: synchronize
: 将对持久域的任何修改写入磁盘,并将所有未修改的持久域更新到磁盘上的内容。
参考NSUserDefaults_Class明确说明会定期调用,我们不必等待他们的调用
您可以使用此代码将值保存到NSUserDefaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:yourArray forKey:@"YourKey"]
[defaults synchronize];
有关使用 NSUserDefault 的详细信息,请检查此
[[NSUserDefaults standardUserDefaults] setBool:<#(BOOL)#> forKey:<#(NSString *)#>]
,这是为布尔值添加的setInt/setFloat/SetDouble etc
,甚至是ObjectiveCobjects
的setValue/setObject
。[[NSUserDefaults standardUserDefaults] setValue:<#(id)#> forKey:<#(NSString *)#>]; [[NSUserDefaults standardUserDefaults] setObject:<#(id)#> forKey:<#(NSString *)#>];
要检索值,您可以使用
getters
likeboolForKey
([[NSUserDefaults standardUserDefaults] boolForKey:<#(NSString *)#>]
)intForKey etc.
。用于
removeObjectForKey
移除对象。
在您的 appDelegate 类中创建所需的 NSMutableArray,即创建 NSMutableArray iVar 的属性,然后您可以在任何类中更新、添加、删除其中的内容。因此,您将在 applicationDidEnterBackground 和 applicationWillTerminate 通知函数中获取数组计数appDelegate 函数本身和数组计数应该是准确的..
在你的AppDelegate.h
创造 ..
@interface yourAppDelegate : UIResponder <UIApplicationDelegate>{
NSMutableArray *myArray;
}
@property(nonatomic,strong)NSMutableArray *myArray; //replace strong by retain if ios <5
在 yourAppDelegate.m
@synthesize myArray;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *
)launchOptions{
self.myArray = [NSMutableArray array];
}
进一步在 appDelegate.m 文件中所需的功能
- (void)applicationWillTerminate:(UIApplication *)application
{
[[NSUserDefaults standardDefaults]setValue:[NSNumber numberWithInt:[self.myArray count] forKey:@"myOwnKey"]];
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
如果您想在任何其他类中向此数组添加对象,只需创建 yourAppDelegate 的委托。
例如在 A 类的 viewDidLoad 中,
-(void)viewDidLoad{ // assuming viewController A
YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplicatio sharedApplication]delegate];
[appDelegate.myArray addObject:@"1232"];
}