views:

136

answers:

2

My code compiles fine but doesn't show the text from mathspractice.txt

-(void)loadText
{
 NSBundle *bundle = [NSBundle mainBundle];
 NSString *textFilePath = [bundle pathForResource:@"mathspractice" ofType:@"txt"];
 NSString *fileContents = [NSString stringWithContentsOfFile:textFilePath];
 NSArray *mathsPracticeTextArray = [[NSArray alloc] initWithArray:[fileContents componentsSeparatedByString:@" "]];
 self.mathsPracticeText = mathsPracticeTextArray;
 [mathsPracticeTextArray release];
}

and:

UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,100,960,40)];
 myLabel.text = [mathsPracticeText componentsJoinedByString:@" "];
 [myScrollView addSubview:myLabel];
 [myLabel release];

can anyone tell me why?

+1  A: 

Your problem lies with the line

self.mathsPracticeText = mathsPracticeTextArray;

If I understand correctly mathsPracticeText is a string. Then with this line:

myLabel.text = [mathsPracticeText componentsJoinedByString:@" "];

nothing will happen because you tried to load the entire array into a string, instead you should do something more like this:

-(void)loadText
{
NSBundle *bundle = [NSBundle mainBundle];
NSString *textFilePath = [bundle pathForResource:@"mathspractice" ofType:@"txt"];
NSString *fileContents = [NSString stringWithContentsOfFile:textFilePath];
mathsPracticeText = fileContents;
[mathsPracticeTextArray release];
}

and

 UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,100,960,40)];
 [myLabel setText:mathsPracticeText];
 [myScrollView addSubview:myLabel];
 [myLabel release];
Matt S.
+1  A: 

In Cocoa Touch, there’s no +[NSString stringWithContentsOfFile:] (and on the desktop it’s deprecated). You have to use stringWithContentsOfURL:encoding:error:.

There’s no obvious other error in your code, but that doesn’t mean that everything is right. You didn’t post the declaration of mathsPracticeText, for instance, but I assume it’s an NSArray.

You’re fiddling a little too much with the arrays in the construction. Instead of building a second array from [fileContents componentsSeparatedByString:@" "] which you later release, you could simply use the one returned from componentsSeparatedByString:

-(void)loadText
{
    NSString *textFilePath = [[NSBundle mainBundle] pathForResource:@"mathspractice" ofType:@"txt"];
    NSString *fileContents = [NSString stringWithContentsOfFile:textFilePath
                                                       encoding:NSUTF8StringEncoding
                                                          error:NULL];
    self.mathsPracticeText = [fileContents componentsSeparatedByString:@" "];
}
Nikolai Ruhe