2013-08-27 3 views
0

В настоящее время я эта функция, которая INIT это мой по умолчанию пользователя:Struct завернутых в памяти NSValue вопросы

+ (void)initialize 
{ 
    // Create a dictionary to hold the default user preference values 
    NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary]; 

    // Put defaults in the dictionary 
    [defaultValues setObject:@(YES) forKey:@"pref key 1"]; 
    ... (further inits) 

    MyCStruct struct; 
    struct.width = struct.height = 0; 
    struct.frameDuration = struct.frameTimeScale = 0; 

    NSValue* structDefaultValue = [NSValue value:&struct 
            withObjCType:@encode(MyCStruct)]; 
    [defaultValues setObject:structDefaultValue 
         forKey:@"myPrefKey"]; 

    // Register the dictionary of defaults 
    [[NSUserDefaults standardUserDefaults] registerDefaults: defaultValues]; 
} 

я получаю исключение точку останова Obj-C в «CFRetain» при регистрации по умолчанию. Все было хорошо, прежде чем я использовал NSValue, поэтому я уверен, что это связано с памятью. Я знаю, что структура справедлива только для локального стека функций, поэтому мне интересно, если это проблема? NSValue скопирует значение, на которое указывает указатель?

Должен ли я создать структуру в куче?

Спасибо!

ответ

2

Вы не можете хранить NSValue прямо в настройках пользователя по умолчанию, потому что он поддерживается plist. Поэтому все записи в словаре должны быть действительны для хранения в plist. Рассмотрите возможность хранения значений в качестве основных целых чисел или кодирования структуры для данных или строкового формата.

+0

Отлично, спасибо! Думаю, я поеду с версией NSData. – guitarflow

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

  • Нет связанных вопросов^_^