2010-10-28 2 views
5

Я создаю приложение iOS, которое читает в текстовом файле и отображает содержимое в поле UIText.stringWithContentsOfFile и initWithContentsOfFile возвращает null после нескольких запусков

Для первых трех последовательных прогонов вашего приложения (перезапуск нового сеанса без выхода), данные считываются в порядке. Однако в четвертой попытке данные, возвращаемые из файла, являются нулями.

Я проверил целостность файла. Проблема возникает при использовании stringWithContentsOfFile или initWithContentsOfFile.

После многих часов устранения неполадок, я считаю, что проблема связана с тем, что буфер очищается в рамках вышеупомянутых методов.

Любое понимание этой проблемы очень ценится. Я пробовал много вещей, не повезло.

Вот код, который я использую для чтения файла:

TheString = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]  
pathForResource:@"My_TextFile" ofType:@"txt"] encoding:NSUTF8StringEncoding error:NULL]; 

Вот код, я использую, чтобы отобразить определенное содержимое файла (содержимое помещается в массиве типа NSArray):

NSArray *My_Array; 

My_Array= [TheString componentsSeparatedByString:@"\n"]; 

/* Obtain specific data to display */ 
    DisplayedData = [My_Array objectAtIndex:M[l]-1]; 
: 
: 
/* Display the data in the view */ 
    MyUITextView.text = DisplayedData; 

/* Log the data */ 
    NSLog(@"%@", MyUITextView.text); 

на 4-й вызове вышеуказанного кода, возвращаемые данные пустые и NSLog возвращается аннулирует

спасибо за любую помощь!

ответ

5

Возможно, я немного опоздал с ответом, но, во всяком случае, может быть, кто-то найдет это полезным. ОК, я также провел день, пытаясь понять, почему мой пользовательский класс для прокручиваемого представления работает 3 раза и отказывается в 4-й раз ... Я обнаружил, что проблема имеет те же атрибуты, что и у вас: вложенная NSString объекты неожиданно исчезают. Хотя указатели указывают на тот же адрес в памяти, память уже заполнена совершенно произвольными объектами, а не моими NSString. И я обратил внимание, что я создал эти NSString с, используя следующий метод класса:

+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error 

Таким образом, я не владелец этих NSString с. И я предположил, что быть владельцем может быть решением, поэтому я создал свои NSString сек через alloc и

- (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error 

метод экземпляра.

Приложение было отремонтировано!

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