(我是 IOS 和 Objective-C 的新手,所以请原谅任何误用的术语...)用户导航到其 IOS 设备上的设置,它不会加载默认值。我读过很多帖子,解释说应用程序应该创建自己的默认值,直到 settings.bundle 被“初始化”。
为此,我编写了一些读取 settings.bundle 并相应地创建数组的代码。但是如果 settings.bundle 尚未初始化,它会创建一个默认数组以在此期间使用。我怀疑我的问题在于我使用逻辑 AND 运算符的以下代码行(可能不正确......):
if (!([swimtypeendurance isEqualToString:@"ON"]) && !([swimtypeendurance isEqualToString:@"OFF"]))
问题是我无法得到上面 if 语句的真实结果,我的应用程序总是执行“else”。我对 settings.bundle 的理解是,如果它们没有被初始化,那么开关既不是 ON 也不是 OFF,就好像它没有价值一样。因此,我正在测试游泳类型耐力的字符串是否既不是 ON 也不是 OFF,换句话说,如果它不是 ON 并且它不是 OFF - 因此我尝试使用 ! 和 &&...
也许解释我在做什么的更好方法是:我正在从 settings.bundle 测试我的一个设置的值,看看它是打开还是关闭。如果它是两种状态之一,那么我假设设置包已经初始化并且可以使用所有设置,如果不是,即它是无状态的,那么我创建一个要使用的数组,直到用户初始化 settings.bundle。
以下是为问题提供上下文的完整代码片段:
NSMutableArray* arrayofswimtypes = [NSMutableArray arrayWithCapacity:15];
NSString *swimtt750 = [defaults boolForKey:kswimtypett750mKey]? @"ON" : @"OFF";
if ([swimtt750 isEqualToString:@"ON"]) {
swimTypeTt750m = [[NSString alloc] initWithFormat:@"Time Trial - 750m"];
[arrayofswimtypes addObject:[[NSString alloc] initWithFormat:@"%@", swimTypeTt750m]];
}
NSString *swimtt1500 = [defaults boolForKey:kswimtypett1500mKey]? @"ON" : @"OFF";
if ([swimtt1500 isEqualToString:@"ON"]) {
swimTypeTt1500m = [[NSString alloc] initWithFormat:@"Time Trial - 1500m"];
[arrayofswimtypes addObject:[[NSString alloc] initWithFormat:@"%@", swimTypeTt1500m]];
}
[arrayofswimtypes addObject:[[NSString alloc] initWithFormat:@"General Session"]];
NSString *swimtypedrills = [defaults boolForKey:kswimtypedrillsKey]? @"ON" : @"OFF";
if ([swimtypedrills isEqualToString:@"ON"]) {
swimTypeDrills = [[NSString alloc] initWithFormat:@"Drills Session"];
[arrayofswimtypes addObject:[[NSString alloc] initWithFormat:@"%@", swimTypeDrills]];
}
NSString *swimtypeendurance = [defaults boolForKey:kswimtypeenduranceKey]? @"ON" : @"OFF";
if ([swimtypeendurance isEqualToString:@"ON"]) {
swimTypeEndurance = [[NSString alloc] initWithFormat:@"Endurance Session"];
[arrayofswimtypes addObject:[[NSString alloc] initWithFormat:@"%@", swimTypeEndurance]];
}
//Place an if-else statement in here to load a default array if the user has not been to settings and initialised the settings.bundle
if (!([swimtypeendurance isEqualToString:@"ON"]) && !([swimtypeendurance isEqualToString:@"OFF"])) {
swimSessTypesArray = [[NSMutableArray alloc] initWithObjects:[[NSString alloc] initWithFormat:@"Time Trial - 750m"],
[[NSString alloc] initWithFormat:@"Time Trial - 1500m"],
[[NSString alloc] initWithFormat:@"General Session"],
[[NSString alloc] initWithFormat:@"Drills Session"],
[[NSString alloc] initWithFormat:@"Endurance Session"], nil];
NSLog(@"Count of swimSessTypesArray NOT FROM Defaults: %i", [swimSessTypesArray count]);
} else {
swimSessTypesArray = arrayofswimtypes;
NSLog(@"Count of swimSessTypesArray from Defaults: %i", [swimSessTypesArray count]);
}
对此的任何提示和评论将不胜感激,包括我可以根据您的卓越知识和经验对我的编码进行的任何改进。
非常感谢您的帮助...