【问题标题】:Pre-populating a NSUserDefaults array with Zero Value values使用零值值预填充 NSUserDefaults 数组
【发布时间】:2011-04-06 21:15:16
【问题描述】:

我需要在 NSUserDefaults 中预先填充并保存一个数组,以便下游方法可以读取和写入存储在那里的十个值。我已经构建了这个可行的解决方案,但是有更好的方法吗?

感谢任何见解! lq

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *myArray = [[NSMutableArray alloc] init];

// Set the array with ten Zero Value placeholders

for (NSUInteger i = 0; i < 10; ++i) {                                               
    [myArray addObject:[NSNumber numberWithInt:0]];
}

[userDefaults setObject:myArray forKey:@"someKeyName"];
[myArray release];

后面的方法这样调用这个数组:

- (void)doSomethingUseful {

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    NSMutableArray *someUsefulArray = [[NSMutableArray alloc] initWithArray:[userDefaults objectForKey:@"someKeyName"]];

    // read some values, write some values: int someInt = [someUsefulArray objectAtIndex:3]; // etc.
    // store array values back to NSUserDefaults . . .

    // IS THERE A WAY TO READ AND WRITE DIRECTLY TO INDEX 3 of the NSUserDefaults array instead???

    [someUsefulArray release]
}

【问题讨论】:

    标签: iphone xcode nsarray nsuserdefaults


    【解决方案1】:

    我实际上在运输应用程序中做了同样的事情。当然,它感觉不优雅,但它确实有效。

    【讨论】:

    • 是的,我一点都不觉得优雅。
    【解决方案2】:

    唯一更优雅、更复杂的解决方案是使用数据驱动的方法:

    1. 有一个.plist 文件,其中包含您认为是默认设置的内容。
    2. 如果程序检测到用户默认为空,就会加载这个默认plist,并提交给NSUserDefaults。

    使用此方法,您的代码不负责构建对象。但是,如果您尝试完成架构升级,则需要返回代码。

    【讨论】:

    • 谢谢。该解决方案可能对下游的其他项目有好处,但在这种情况下,plist 中存储的值太多,这只是其中之一。
    猜你喜欢
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2017-10-24
    • 2018-05-22
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多