Iphone 什么';存储许多词典的最佳方式是什么?
我需要在iPhone应用程序中为不同的配置和设置存储许多Facebook应用程序Id和Twitter用户密钥 我知道我这样做的方式不是最好的,因为它有太多的Iphone 什么';存储许多词典的最佳方式是什么?,iphone,objective-c,nsstring,nsarray,nsdictionary,Iphone,Objective C,Nsstring,Nsarray,Nsdictionary,我需要在iPhone应用程序中为不同的配置和设置存储许多Facebook应用程序Id和Twitter用户密钥 我知道我这样做的方式不是最好的,因为它有太多的if-else语句。使用正确的Objective-C设计模式完成此任务的最佳方式是什么? 这是我的密码: - (id) init { self = [super init]; if (!self) return nil; keyNames = [[NSArray arrayWithObjects: @"facebo
if-else
语句。使用正确的Objective-C设计模式完成此任务的最佳方式是什么?
这是我的密码:
- (id) init {
self = [super init];
if (!self) return nil;
keyNames = [[NSArray arrayWithObjects:
@"facebookAppId",
@"facebookLocalAppId",
@"twitterConsumerKey",
@"twitterSecret",
nil]retain];
if (MainLanguage == @"English") {
keys = [[NSArray arrayWithObjects:
@"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", //facebookAppId
@"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", //facebookLocalAppId
@"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", //twitterConsumerKey
@"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", //twitterSecret
nil]retain];
dictionary = [[NSDictionary dictionaryWithObjects:keys forKeys:keyNames]retain];
}
else if (MainLanguage == @"Spanish") {
keys = [[NSArray arrayWithObjects:
@"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", //facebookAppId
@"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", //facebookLocalAppId
@"cccccccccccccccccccccccccccccccc", //twitterConsumerKey
@"dddddddddddddddddddddddddddddddd", //twitterSecret
nil]retain];
dictionary = [[NSDictionary dictionaryWithObjects:keys forKeys:keyNames]retain];
} else if (MainLanguage == @"French") {
//etc...
} else if (MainLanguage == @"Italian") {
//etc...
}
//etc..
return self;
}
数据必须存储在某个地方,对吗?您可以有一个单独的类将数据存储在哈希表中。然后,你只需要在每次获得一种语言时引用它。你的代码看起来肯定会更干净。查看NSHashTable。两个主要问题:
- 为什么键名在数组中
- 您不应该将NSString*s与==进行比较
[NSDictionary dictionaryWithObjectsAndKeys:
[NSDictionary dictionaryWithObjectsAndKeys:
@"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", @"facebookAppId",
@"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", @"facebookLocalAppId",
...
nil], @"en",
[NSDictionary dictionaryWithObjectsAndKeys:
@"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", @"facebookAppId",
...
nil], @"es",
...
nil]
<dict>
<key>en</key>
<dict>
<key>facebookAppId</key>
<string>...</string>
...
</dict>
<key>es</key>
<dict>
...
</dict>
...
</dict>
EN
facebookAppId
...
...
锿
...
...
struct {
NSString *lang;
NSString *facebookAppId;
NSString *facebookLocalAppId;
NSString *twitterConsumerKey;
NSString *twitterConsumerSecret;
} const foo_data[] = {
{@"en", @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", @"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", ...},
{@"es", @"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ...},
...
};
...
for (size_t i = 0; i < sizeof(foo_data)/sizeof(foo_data[0]); i++) {
if ([lang isEqualToString:foo_data[i].lang]) {
return [NSDictionary dictionaryWithObjectsAndKeys:
foo_data[i].facebookAppId,@"facebookAppId",
...
nil];
}
}
struct{
NSString*lang;
NSString*facebookAppId;
NSString*facebookLocalAppId;
NSString*twitterConsumerKey;
NSString*TwitterConsumerCret;
}常量foo_数据[]={
{“en”、@“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”、@“yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,
{@“es”、@“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
...
};
...
对于(size_t i=0;i
谢谢,我来看看。我想用plist文件,但在这种情况下不安全。NSHashTable是否适用于iPhone?假设每种语言的值不同,那么实际上您并没有做错。如果您想知道如何存储数据,我可以发布一个关于创建自定义可架构对象的示例!谢谢!
struct {
NSString *lang;
NSString *facebookAppId;
NSString *facebookLocalAppId;
NSString *twitterConsumerKey;
NSString *twitterConsumerSecret;
} const foo_data[] = {
{@"en", @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", @"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", ...},
{@"es", @"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ...},
...
};
...
for (size_t i = 0; i < sizeof(foo_data)/sizeof(foo_data[0]); i++) {
if ([lang isEqualToString:foo_data[i].lang]) {
return [NSDictionary dictionaryWithObjectsAndKeys:
foo_data[i].facebookAppId,@"facebookAppId",
...
nil];
}
}