Получение SIGABRT при доступе к NSDictionary - PullRequest
0 голосов
/ 26 сентября 2011

При использовании NSDictionary, который перемещается к PLIST, я продолжаю получать ошибку SIGABRT,

**2011-09-26 18:31:01.740 AlarmAppiPhone[3126:10d03] -[__NSCFArray _isNaturallyRTL]: unrecognized selector sent to instance 0x5cb5090
2011-09-26 18:31:01.742 AlarmAppiPhone[3126:10d03] Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray _isNaturallyRTL]: unrecognized selector sent to instance 0x5cb5090'**

в этой строке, editLabelTextField.text = [alarm objectForKey:ROOT_KEY]; Я не знаю, почему я получаю это.Сигнал тревоги - это NSDictionary, и он использует объект для ключа для перехода к клавише, которую я объявил вот так: #define ROOT_KEY @"Root".Я определил это в другом файле.Plist выглядит примерно так:

<?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>Root</key>
    <array>
        <dict>
            <key>label</key>
            <string>alarm1</string>
            <key>time</key>
            <date>2011-09-03T07:24:20Z</date>
        </dict>
        <dict>
            <key>label</key>
            <string>alarm2</string>
            <key>time</key>
            <string>2011-09-03T07:24:14Z</string>
        </dict>
    </array>
</dict>
</plist>

1 Ответ

2 голосов
/ 26 сентября 2011

[alarm objectForKey:@"Root"] возвращает NSArray, который вы пытаетесь присвоить свойству, которое ожидает NSString. (_isNaturallyRTL является специфической для iOS частной функцией NSString.)

Полагаю, вы пытаетесь добраться до label. Структурно такой доступ будет выглядеть так (ваша переменная alarm, вероятно, должна называться alarmPlist):

NSArray *alarms = [alarmPlist objectForKey:@"Root"];
NSDictionary *alarm = [alarms objectAtIndex:0];
editLabelTextField.text = [alarm objectForKey:@"label"];

Замените 0 другим индексом для доступа к другому сигналу тревоги.

...