stringWithContentsOfFile和initWithContentsOfFile在多次运行后返回null

时间:2010-10-28 15:24:29

标签: ios

我正在创建一个iOS应用程序,该应用程序读入文本文件并在UIText字段中显示内容。

对于应用程序的前三次连续运行(在不退出的情况下重新启动新会话), 数据读得很好。但是,在第四次尝试时,从文件返回的数据都是空值。

我已经验证了文件的完整性。使用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返回空值

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

也许我的回答有点迟,但是,无论如何,也许有人会发现它很有用。 好吧,我还花了一天的时间试图找出为什么我的可滚动视图的自定义类工作3次并且在第4次拒绝...我发现问题与你的属性完全相同:嵌套的NSString对象意外地消失了。虽然指针指向内存中的相同地址,但内存已经填充了非常随意的对象而不是NSString s。 我注意到我使用以下类方法创建了这些NSString

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

所以,我不是这些NSString的所有者。 我认为所有者可以是一个解决方案,所以我通过NSString

创建了alloc s
- (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc  error:(NSError  **)error 

实例方法。

应用程序已修复!