2010-10-28 16 views
5

Tôi đang tạo ứng dụng iOS đọc trong tệp văn bản và hiển thị nội dung trong trường UIText.stringWithContentsOfFile và initWithContentsOfFile trả về null sau một vài lần chạy

Đối với lần chạy thứ nhất liên tiếp của ứng dụnge (Khởi động lại phiên mới mà không thoát), dữ liệu được đọc ổn. Tuy nhiên trong lần thử thứ tư, dữ liệu được trả về từ tệp là tất cả các giá trị rỗng.

Tôi đã xác minh tính toàn vẹn của tệp. Vấn đề tồn tại khi sử dụng stringWithContentsOfFile hoặc initWithContentsOfFile.

Sau nhiều giờ khắc phục sự cố, tôi tin rằng vấn đề là bằng cách nào đó liên quan đến bộ đệm bị xóa trong các phương pháp được đề cập ở trên.

Bất kỳ thông tin chi tiết nào về vấn đề này được đánh giá cao. Tôi đã thử nhiều thứ mà không có may mắn.

Dưới đây là đoạn code tôi sử dụng để đọc trong file:

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

Dưới đây là đoạn code tôi sử dụng để hiển thị nội dung nào đó của tập tin (Nội dung được đặt trong một loạt các loại 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); 

Trong lần gọi thứ 4 của mã ở trên, dữ liệu được trả về trống và NSLOG trả lại giá trị rỗng

Cảm ơn bạn rất nhiều vì đã trợ giúp!

Trả lời

5

Có thể tôi hơi muộn với câu trả lời, nhưng, dù sao, có thể ai đó sẽ thấy nó hữu ích. OK, tôi cũng đã dành một ngày cố gắng tìm ra lý do tại sao lớp tùy chỉnh của tôi cho chế độ xem cuộn được làm việc 3 lần và từ chối vào thời gian thứ 4 ... Tôi thấy rằng vấn đề có các thuộc tính giống như của bạn: lồng nhau NSString các đối tượng bất ngờ biến mất. Mặc dù con trỏ trỏ đến cùng một địa chỉ trong bộ nhớ, bộ nhớ đã được lấp đầy với các đối tượng khá tùy ý thay vì các số NSString s của tôi. Và tôi chú ý mà tôi tạo ra những NSString s theo phương pháp lớp sau đây:

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

Vì vậy, tôi không phải là chủ sở hữu của những NSString s. Và tôi cho rằng để là chủ sở hữu có thể là một giải pháp, vì vậy tôi tạo NSString s của tôi thông qua alloc

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

phương pháp dụ.

Ứng dụng đã được sửa!