Используйте objectForKey, чтобы вернуть неправильный тип ключа - PullRequest
0 голосов
/ 10 ноября 2010
  • Я читаю данные из файла, который является массивом NSDictionary. С каждым NSDictionary включите ключ с именем «EnglishName» и значением типа NSString. Я получаю значение NSDictionary, создаю новый ViewController с помощью функции инициализации: initWithName: [(NSDictionary *) oneObjectInArray objectForKey: @ "EnglishName"]; Затем используйте NavigationController, чтобы нажать его.
  • Первый раз, когда я нажимаю на него -> нет проблем. Затем нажмите назад, затем сделайте это снова (щелкните, чтобы создать новый ViewController и нажмите). Появляется ошибка с информацией: [__NSArrayM rangeOfString:]: нераспознанный селектор, отправленный экземпляру 0x63509a0 '. -Я проверил, добавив команду NSLog (@ "% @", [объект getObjectForKey: @ "EnglishName"]) -> ошибка. Затем я попытался снова прочитать данные в функции didShowView (после возврата). Работает без ошибок.

Вот код для получения данных из файла. Слишком долго, но, возможно, поможет решить эту проблему`- (void) getListStoriesAvailable { [_header removeAllObjects]; SAFE_RELEASE (saveDataFromDataFile) [StoriesAvailableArray removeAllObjects]; NSString * digit = @ "0123456789"; NSString * ALPHA = @ "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

for (int i = 0; i < 27; i++) 
{
    NSMutableArray * element = [[NSMutableArray alloc] init];
    [storiesAvailableArray addObject:element];
    [element release];
}
NSString * path = [NSString stringWithFormat: @"%@/data.ini",documentDirectory];
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) 
{
    saveDataFromDataFile = [[NSMutableArray alloc] initWithContentsOfFile:path];
    for (int i = 0; i < [saveDataFromDataFile count]; i++)
        [[saveDataFromDataFile objectAtIndex:i] setObject:@"NO" forKey:@"Downloading"];
    for (int  i = 0; i < [saveDataFromDataFile count]; i++)
    {
        NSDictionary * theStory = [saveDataFromDataFile objectAtIndex:i];       
        NSString * word = [theStory objectForKey:@"EnglishName"];
        if ([word length] == 0) continue;

        NSString * firstCharacter = [[word substringToIndex: 1] uppercaseString];

        NSRange range;
        //The special case when the name of story start with a digit, add the story into "0-9" header and index
        range = [digit rangeOfString:firstCharacter];
        if (range.location != NSNotFound) 
        {
            [[storiesAvailableArray objectAtIndex:0] addObject:theStory];
            continue;
        }
        //Check the index of the first character
        range = [ALPHA rangeOfString:firstCharacter];
        if (range.location != NSNotFound) 
        {
            [[storiesAvailableArray objectAtIndex:(range.location + 1)] addObject:theStory];
            continue;
        }
    }
}
NSMutableArray * temp = [[NSMutableArray alloc] init];
for (int i = 0; i < [storiesAvailableArray count]; i++)
{
    if ([[storiesAvailableArray objectAtIndex:i] count] != 0)
    {
        [_header addObject:[ALPHA_ARRAY objectAtIndex:i]];
        [temp addObject:[storiesAvailableArray objectAtIndex:i]];
    }
}
[storiesAvailableArray removeAllObjects];
for (int i = 0; i < [temp count]; i++)
    [storiesAvailableArray addObject:[temp objectAtIndex:i]];
//storiesAvailableArray = temp;
[temp release];

} `

И есть код для получения NSDictionary

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

{ currentTable = tableView; [tableView deselectRowAtIndexPath: indexPath animated: YES]; NSInteger row = [indexPath row]; NSDictionary * story; if (tableView == listStoriesAvailable) story = [[StoriesAvailableArray objectAtIndex: [раздел indexPath]] objectAtIndex: строка];

_storyDetail = [[StoryViewController alloc] initWithName:[story objectForKey:@"EnglishName"]];
[self.navigationController setDelegate:self];
[self.navigationController pushViewController:_storyDetail animated:YES];

}

Так в чем же проблема? Пожалуйста, помогите!

1 Ответ

1 голос
/ 10 ноября 2010

Вы не сохраняете свой словарь.

Пожалуйста, отредактируйте свой вопрос и добавьте код, в котором создается ваш NSDictionary.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...