2014-10-13 5 views
0

В Objective C, у меня есть somethng вроде этого:NSInputStream следующим образом: MAXLENGTH: не может прочитать данные, возвращает -1

uint8_t f[400000]; 
NSString *Str; 
unsigned int count = 0; 
NSError* error = nil; 
Str = [[NSString alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Test" ofType:@"txt"] encoding:NSUTF8StringEncoding error:&error]; 
@try { 
    NSInputStream *fin = [NSInputStream inputStreamWithData:[Str dataUsingEncoding:NSUTF8StringEncoding]]; 
    count = [fin read:f maxLength:400000]; 

} 
@catch (NSException * e) { 
    NSLog(@"Exception: %@", e); 
} 
@finally { 
    NSLog(@"finally"); 
} 

Я превращающего nsstring к nsinputstream, а затем пытается прочитать содержимое

Но после того, как я отлаживаю код, count имеет -1 в нем, то есть ошибка при чтении. Я не понимаю, что я делаю неправильно здесь! Может кто-то, пожалуйста, помогите мне.

ПРИМЕЧАНИЕ: Test.txt представляет собой обычный текстовый файл с содержанием, как только «Hello» и отладка показывает Str инициализируется с содержанием. Это означает, что что-то не так в блоке try.

Любая помощь приветствуется.

+1

I * believe * вам необходимо настроить делегат и запланировать входной поток в цикле выполнения ([см. Это] (https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ Струйные/Статьи/ReadingInputStreams.html)). Вместо этого используйте 'NSFileManager'. – Droppy

+0

Да, он сделал трюк – Sibir

+0

Также создание переменной 400K 'auto' - плохая идея ;-) – Droppy

ответ

1

Вы не открыли поток. Вы не можете читать или записывать NSStream (NSInputStream и NSOutputStream оба являются подклассами NSStream), не открывая их первым. Просто позвоните open на свой объект потока перед чтением с него.

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