2015-05-20 2 views
0

У меня есть следующий Root.plist в моем Settings.bundle:Регистрация IOS пользовательские настройки по умолчанию в Qt

<?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>PreferenceSpecifiers</key> 
    <array> 
     <dict> 
      <key>Type</key> 
      <string>PSTextFieldSpecifier</string> 
      <key>Title</key> 
      <string>TAP Engine Hostname: </string> 
      <key>DefaultValue</key> 
      <string>localhost</string> 
      <key>Key</key> 
      <string>engineHostname</string> 
     </dict> 
    </array> 
    <key>StringsTable</key> 
    <string>Root</string> 
</dict> 
</plist> 

Вопрос в том, когда я запрашиваю значение engineHostname, это пустая строка. Из моего чтения на страницах разработчиков Apple настройки по умолчанию необходимо зарегистрировать в базе данных пользовательских настроек. Может ли кто-нибудь предложить, как это можно сделать с помощью Qt?

+0

Возможно, вам стоит взглянуть на 'QSettings' –

ответ

0

Я решил проблему. Я искал «способ Qt» для решения моей проблемы, но Qt действительно обеспечивает механизм для выполнения того, что я хочу. Qt Позволяет файлам проекта содержать файлы Objective C, а компилятор Clang допускает смешивание C++ и Objective C. Фокус в том, что файл заголовка имеет интерфейс C++. В итоге я получил следующее:

// 
// UserPreferenceUtility.h 
// tap_new_display_app 
// 
// Created by David Roscoe on 5/21/15. 
// 
// 

#ifndef tap_new_display_app_UserPreferenceUtility_h 
#define tap_new_display_app_UserPreferenceUtility_h 

class QString; 

class UserPreferenceUtility 
{ 
public: 

    /// register default preferences from plist file 
    void registerDefaultPrefs(void); 

    /// get currently stored engine hostname 
    QString getEngineHostname(void); 

private: // methods 

}; 

#endif 

Это обеспечивает интерфейс C++. Реализация смешанного режима здесь:

// 
// UserPreferenceUtility.mm 
// tap_new_display_app 
// 
// Created by David Roscoe on 5/19/15. 
// 
// 

#include "UserPreferenceUtility.h" 
#import <Foundation/Foundation.h> 
#include <QtCore> 

// ---------------------------------------------------------------------------- 

void UserPreferenceUtility::registerDefaultPrefs() 
{ 
    NSDictionary* appDefaults = [NSDictionary 
           dictionaryWithObject:@"localhost" forKey:@"engineHostname"]; 

    if (appDefaults) 
    { 
    // the default value was found in the dictionary. Register it. 
    // wrapping this in an if.. clause prevents overwriting a user entered 
    // value with the default value 
    [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; 
    } 
} 

// ---------------------------------------------------------------------------- 

QString UserPreferenceUtility::getEngineHostname() 
{ 
    NSString* engine_hostname_pref = [[NSUserDefaults standardUserDefaults] stringForKey:@"engineHostname"]; 
    return QString::fromNSString(engine_hostname_pref); 
} 

функции C++ выполнить родной Objective C требует, чтобы извлечь предпочтения, хранящиеся в базе данных предпочтений пользователя.

Смежные вопросы