简体   繁体   中英

Cannot get mainBundle resources (returns null)

I'm trying to access a resource file I added in the app using relative pathing. I've read that I was supposed to use something like this :

NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath = [[mainBundle resourcePath] stringByAppendingPathComponent:@"myFile.txt"];
fh = [NSFileHandle fileHandleForReadingAtPath:resourcePath];

Except this isn't working. With NSLog, I am able to confirm mainBundle isn't null and resourcePath returns something like this: /Users/tom/Library/Developer/CoreSimulator/Devices/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX/data/Containers/Bundle/Application/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX/MyApp_Demo.app/myFile.txt

I've tried many things, such as adding the name of directory where the resource is located, that would be Ressources/myFile , but nothing is yielding any result.

I'm a total beginner with Objective-C but I have to tinker with legacy code and I have to deal with this, so any help is much appreciated.

Side note: this is what the project structure looks like from Xcode:

Xcode中的项目结构

Meanwhile, in Finder, the Ressources directory isn't inside the MyApp directory, rather they're on the same level inside the project directory. I wonder if that could be the problem.

Side note 2:

NSString *filePath2 = [[NSBundle mainBundle] pathForResource:@"myFile" ofType:@"txt"];

returns (null) after logging in the console.

It is best to use a simulator for this debugging process

Verification

You should check if the file or Resources folder is actually being copied to the right location or not. If you have added the Resources folder, than check it with the below code

NSString *resourcesFolderPath = [[NSBundle mainBundle] pathForResource:@"Resources" ofType:nil];
NSString *fullFilePath = [NSString pathWithComponents:@[demoToursPath,"filename.txt"]];

NSFileManager *manager=[NSFileManager defaultManager];

NSLog(@"Filepath: %@", fullFilePath);
NSLog(@"File Exist: %@", [manager fileExistsAtPath:fullFilePath]);

Once you have confirmed this, you can update your code to match the location and path it needs to be in order to access the file.

Additional Debug

You can also just print the Document Directory for the application and open a finder window and navigate there to see if the Resources folder is added at the right place (if it was added)

NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]

NSLog(@"Document Directory: %@", documentDir);

If you update the question with more info, I would be able to help you better

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM