В базовой структуре моей программы пользователь выбирает элемент из UITableView, который соответствует сохраненному текстовому файлу. Затем файл считывается в массив и словарь, где у массива есть ключи (я знаю, что могу просто получить ключи из самого словаря, это не мой вопрос).
Представление затем изменяется на UISplitView, где главное представление имеет ключи, а подробное представление содержит элементы в словаре, приписанные этому ключу. В данном случае это серия вопросов «Да / Нет», на которые пользователь выбирает ответ.
Моя проблема заключается в следующем: когда я нажимаю на ячейку в UITableView (первый экран), она работает нормально, данные считываются идеально и так далее. Когда я возвращаюсь к UITableView и снова нажимаю на ту же ячейку, программа вылетает. Вот метод чтения из файла:
-(NSArray *)readFromFile:(NSString *)filePath{
// NSLog(@"Path was: %@", filePath);
NSString *file = [[NSString alloc] initWithContentsOfFile:filePath];
// NSLog(@"File was: %@", file);
NSScanner *fileScanner = [[NSScanner alloc] initWithString:file];
NSString *held;
NSString *key;
NSMutableArray *detailStrings;
NSMutableArray *keys = [[NSMutableArray alloc] init];
NSMutableDictionary *details = [[NSMutableDictionary alloc] init];
/**
This is where the fun stuff happens!
**/
while(![fileScanner isAtEnd]){
//Scan the string into held
[fileScanner scanUpToString:@"\r" intoString:&held];
NSLog(@"Inside the while loop");
// If it is a character, it's one of the Key points, so we do the management necessary
if ([[NSCharacterSet lowercaseLetterCharacterSet] characterIsMember:[[held lowercaseString] characterAtIndex: 0]]){
NSArray *checkers = [[NSArray alloc] initWithArray:[held componentsSeparatedByString:@"\t"]];
NSLog(@"Word at index 2: %@", [checkers objectAtIndex:2]);
if(detailStrings != nil){
[details setObject:detailStrings forKey:key];
[detailStrings release];
}
NSLog(@"After if statement");
key = [checkers objectAtIndex:2];
[keys addObject:(NSString *) key];
detailStrings = [[NSMutableArray alloc] init];
}
else if ([[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[[held lowercaseString] characterAtIndex: 0]]){
NSArray *checkers = [[NSArray alloc] initWithArray:[held componentsSeparatedByString:@"\t"]];
NSLog(@"Word at index 1: %@", [checkers objectAtIndex:1]);
[detailStrings addObject:[checkers objectAtIndex:1]];
}
}
NSLog(@"File has been read in");
[details setObject:detailStrings forKey:key];
NSArray *contents = [[NSArray alloc] initWithObjects:(NSMutableArray *) keys, (NSMutableDictionary *) details, nil];
[detailStrings release];
return contents;
}
Я определил, что программа вылетает внутри
if(detailStrings != nil)
заявление. Я полагаю, это потому, что мне не хватает некоторого управления памятью, которое я должен делать, но не знаю, где оно идет не так. Любые идеи относительно проблемы, или почему это терпит крах, не давая мне журнал?