Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Monaj

macrumors regular
Original poster
May 24, 2009
193
0
Hi all,

In my application I am retrieving data from database and showing in it. In db some of the tables contain 1000+ records. Now my requirement is to show this data even if there is no net connection, so I am planning to store the tables in SQLite db at user's machine, but there is a worry:

Since SQLite db will be included within resources folder, in project, so it will be by default contained within application binary. So I want to know that when the application will be launched will all this data reside on RAM ? If yes, then I think this can cause some problems, so in that case- is there any alternative solution to store data locally?

Thanks,

Monaj
 
Mac OS X will not automatically load everything in the resources directory into RAM. So don't be concerned about the SQLite database being in the resources directory.

Except...

This isn't good practice. The best practise IMHO would be to have the database in ~/Library/Caches/Blah/, where Blah is a directory with the same name as the bundle identifier of your application (something like com.mycompany.myapp).

Include an empty SQLite database in the resources folder as you planned, but don't put any data into it. Instead, when your application launches create the ~/Library/Caches/Blah directory and copy the SQLite database from your resources directory (if they don't exist already) and then use the database in the Caches subdirectory.

BTW You can get the full, "future-proof" path to ~/Library/Caches with code like this:

Code:
NSArray *array = 
    NSSearchPathForDirectoriesInDomains(
        NSCachesDirectory,
        NSUserDomainMask,
        YES);
NSString *pathString = [array objectAtIndex: 0];
 
Last edited:
Ahh, I've just read your original post more carefully.

The files in the Resources folder inside your XCode project, don't end up in your application's executable. Mac OS X (and iOS for that matter) is different from other operating systems with respect to how applications are package.

What you see as an application icon, in say /Applications, is not a single file, but a directory. If you control+click on these and choose "Show Package Contents" you can see the files within the application.

The files in the Resources folder are copied in to the Contents/Resources directory within your application when XCode builds.

Check out the Bundle Programming Guide in the developer docs. The Bundle Structure section goes into detail about the directories and files within a Mac OS X application. There's also a section titled Accessing a Bundle's Contents which will help you access the SQLite database file.
 
Last edited:
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.