3

私は xCode 3.2 を使用していましたが、xCode 4.2 に移行し、Settings.bundle からいくつかの値を取得しました ... 正常に動作していました。

Settings.bundle のいくつかの値を編集する必要がありますが、Root.plist ファイルが表示されなかったため、以下の手順に従いましたが、ファイルを変更しませんでした。

1) Click on the Settings.Bundle file, go over to the utilities window,
and look in the File Inspector.
2) Using the drop-down, change the file type to 'Application Bundle'

その後、Root.plist を確認できましたが、アプリケーションでその値を取得できませんでした。実際に値の代わりにNullを取得しています。

以下は、Settings.bundle のコードとイメージです。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
host = [defaults stringForKey:@"meter_preference"];
if(host == nil)
{
    host = @"10.20.20.1";
    DDLogError(@"Meter host is nil from NSUserDefaults, defaulting to %@", host);
}

ここに画像の説明を入力

4

2 に答える 2

4

私は解決策を得ました.applicationDidFinishLaunchingWithOptionsで以下のコードを呼び出して、ユーザーのデフォルトを初期化してください. そしてそれは動作します

somePropertyYouExpect最初の行を User Defaults に保存したプロパティに置き換えます。

if (![[NSUserDefaults standardUserDefaults] objectForKey:@"somePropertyYouExpect"])  {

    NSString  *mainBundlePath = [[NSBundle mainBundle] bundlePath];
    NSString  *settingsPropertyListPath = [mainBundlePath
                                           stringByAppendingPathComponent:@"Settings.bundle/Root.plist"];

    NSDictionary *settingsPropertyList = [NSDictionary 
                                          dictionaryWithContentsOfFile:settingsPropertyListPath];

    NSMutableArray      *preferenceArray = [settingsPropertyList objectForKey:@"PreferenceSpecifiers"];
    NSMutableDictionary *registerableDictionary = [NSMutableDictionary dictionary];

    for (int i = 0; i < [preferenceArray count]; i++)  { 
        NSString  *key = [[preferenceArray objectAtIndex:i] objectForKey:@"Key"];

        if (key)  {
            id  value = [[preferenceArray objectAtIndex:i] objectForKey:@"DefaultValue"];
            [registerableDictionary setObject:value forKey:key];
        }
    }

    [[NSUserDefaults standardUserDefaults] registerDefaults:registerableDictionary]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
于 2012-10-10T06:13:47.040 に答える
1

あなたのコードから、これを試してみてください..

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    host = [defaults stringForKey:@"meter_preference"];
    if(!host == nil)
    {
        host = @"10.20.20.1";
        DDLogError(@"Meter host is nil from NSUserDefaults, defaulting to %@", host);
    }

また

このリンクを確認してください...

iPhone - Setting.bundle を読み取ると間違った値が返される

NSUserDefaults 設定バンドル Plist

于 2012-10-04T10:53:37.667 に答える