- Я читаю данные из файла, который является массивом 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];
}
Так в чем же проблема? Пожалуйста, помогите!