1

我在如何/在哪里保存我NSUserDefaults的 forapplicationDidEnterBackground和时遇到问题,当用户退出应用程序或进入后台时applicationWillTerminate,我需要从另一个保存我的NSArray计数。但我不知道我是否会保存正确的,因为当我删除它时我的计数正在更新。我无法将其保存在和上。希望有人会帮忙。谢谢你。NSUserDefaultsUIViewControllerintegerNSArrayUIViewviewDidLoadviewDidAppear

4

4 回答 4

1

如果您需要从另一个 ViewController 保存,那么最好添加NSMutableArrayappDelegate。每当您删除或添加对象时,请保存数组的计数,因为它将像这样覆盖:

 [[NSUserDefaults standardUserDefaults] setInteger:[yourArray count] forKey:@"Count"];
 [[NSUserDefaults standardUserDefaults] synchronize];

像这样检索:

 NSInteger count = [[NSUserDefaults standardUserDefaults] integerForKey:@"Count"];

编辑: synchronize: 将对持久域的任何修改写入磁盘,并将所有未修改的持久域更新到磁盘上的内容。

参考NSUserDefaults_Class明确说明会定期调用,我们不必等待他们的调用

于 2012-10-03T09:51:26.403 回答
0

您可以使用此代码将值保存到NSUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:yourArray forKey:@"YourKey"]
[defaults synchronize];
于 2012-10-03T14:35:22.923 回答
0

有关使用 NSUserDefault 的详细信息,请检查此

  • [[NSUserDefaults standardUserDefaults] setBool:<#(BOOL)#> forKey:<#(NSString *)#>],这是为布尔值添加的setInt/setFloat/SetDouble etc,甚至是ObjectiveC objectssetValue/setObject

    [[NSUserDefaults standardUserDefaults] setValue:<#(id)#> forKey:<#(NSString *)#>];
    [[NSUserDefaults standardUserDefaults] setObject:<#(id)#> forKey:<#(NSString *)#>];
    
  • 要检索值,您可以使用getterslike boolForKey( [[NSUserDefaults standardUserDefaults] boolForKey:<#(NSString *)#>]) intForKey etc.

  • 用于removeObjectForKey移除对象。

于 2013-05-03T06:38:39.243 回答
0

在您的 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"];
}
于 2012-10-03T09:51:37.440 回答