Как использовать значение в PSLinkListCell в пакете предпочтений?

Я хотел бы сделать пакет предпочтений для моего джейлбрейк-твика. Я успешно сделал пакет предпочтений с переключателем, который работает.

Но я хотел бы настройку для выбора цвета. Пример:

         Blue      
Color >  Yellow       
         Green

Поэтому, если я нажму Цвет, я попаду на другой экран, где мне будет предложено выбрать "Синий", "Желтый" или " Зеленый» Я просмотрел учебные пособия в сети и думаю, что это PSLinkList.

Но я хочу, чтобы мой твик читал plist и фиксировал, какой цвет выбран. Я думаю, что это будет читать validValues из PSLinkList, я прав?

Но какой код я бы использовал для чтения plist?

EDIT: Нейт помог мне добавить PSListcontroller, но я столкнулся с одной проблемой:

введите здесь описание изображения

Вот мой plist http://pastebin.com/uNKzLBrf

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>items</key>
  <array>
    <dict>
      <key>cell</key>
      <string>PSGroupCell</string>
      <key>label</key>
      <string>Main</string>
    </dict>
    <dict>
      <key>cell</key>
      <string>PSSwitchCell</string>
      <key>default</key>
      <true/>
      <key>defaults</key>
      <string>com.junyi00.prefs</string>
      <key>key</key>
      <string>enabled</string>
      <key>label</key>
      <string>Enable</string>
    </dict>
    <dict>
      <key>cell</key>
      <string>PSGroupCell</string>
      <key>label</key>
      <string>Colors</string>
    </dict>
    <dict>
      <key>cell</key>
      <string>PSListLinkCell</string>
      <key>defaults</key>
      <string>com.junyi00.prefs</string>
      <key>detail</key>
      <string>PSListItemsController</string>
      <key>key</key>
      <string>color</string>
      <key>label</key>
      <string>Color</string>
      <key>validTitles</key>
      <array>
        <string>Default</string>
        <string>Random</string>
        <string>Yellow</string>
        <string>Blue</string>
        <string>Red</string>
        <string>Green</string>
      </array>
      <key>validValues</key>
      <array>
        <string>Default</string>
        <string>Random</string>
        <string>Yellow</string>
        <string>Blue</string>
        <string>Red</string>
        <string>Green</string>
      </array>
    </dict>
  </array>
  <key>title</key>
  <string>Flash Color</string>
</dict>
</plist>

Помочь мне с этим?


person junyi00    schedule 10.03.2013    source источник


Ответы (1)


Взгляните на эту старый учебник. (Примечание: для тех, кто читает это, в руководстве не используется PreferenceLoader, который теперь должен использовать для этой задачи)

В вашем случае я думаю, что MyAppName.plist должно содержать что-то вроде этого:

    <key>items</key>
    <array>
        <dict>
            <key>cell</key>
            <string>PSLinkListCell</string>
            <key>defaults</key>
            <string>com.mycompany.MyAppName</string>
            <key>detail</key>
            <string>PSListItemsController</string>
            <key>key</key>
            <string>color_pref</string>
            <key>label</key>
            <string>Color</string>
            <key>validTitles</key>
            <array>
                <string>Blue</string>
                <string>Yellow</string>
                <string>Green</string>
            </array>
            <key>validValues</key>
            <array>
                <string>Blue</string>
                <string>Yellow</string>
                <string>Green</string>
            </array>
        </dict>
    </array>

Который затем может быть прочитан вашим кодом следующим образом:

#define PLIST_FILENAME @"/var/mobile/Library/Preferences/com.mycompany.MyAppName.plist"
#define COLOR_PREF @"color_pref"

// an ivar
NSMutableDictionary* preferences;

- (void) initializePreferences {
    NSFileManager* fileManager = [NSFileManager defaultManager];

    // initialize the preferences
    if (![fileManager fileExistsAtPath: PLIST_FILENAME]) {

        // make sure the user settings have default values assigned
        NSDictionary* defaultPrefs = [[NSDictionary alloc] initWithObjectsAndKeys:
                                       @"Yellow", COLOR_PREF,
                                       nil];

        preferences = [[NSMutableDictionary alloc] initWithDictionary: defaultPrefs];
        [preferences writeToFile: PLIST_FILENAME atomically: YES];
    } else {
        preferences = [[NSMutableDictionary alloc] initWithContentsOfFile: PLIST_FILENAME];
    }
}

- (NSString*) colorPref {
    return [preferences valueForKey: COLOR_PREF];
}

Я пропустил здесь некоторые шаги, так как похоже, что вы знакомы с общим процессом добавления джейлбрейка. приложения или настройки в Preferences.app. Если это не работает для вас, напишите комментарий с просьбой разъяснить.

person Nate    schedule 10.03.2013
comment
Большое спасибо! Я попробую это в ближайшее время. Я видел это раньше, но в основном я пытался прочитать plist с моим собственным кодом, но потерпел неудачу. - person junyi00; 10.03.2013
comment
Я, наконец, исправил свою проблему после нескольких попыток, используя это, но, к сожалению, я не могу выбрать, какой цвет (отображается только ячейка, нажатие на нее ничего не делает). Пожалуйста, помогите здесь - person junyi00; 15.03.2013
comment
Добавил плист в Верхний пост - person junyi00; 16.03.2013
comment
@junnyi00, вы написали с ошибкой PSLinkListCell. Вы набрали PSListLinkCell. Это проблема. - person Nate; 17.03.2013