There are lots of alternatives to storing the data in a plist. Core Data would be my choice. Learning how to use core data is worth the time investment. You could still use the plist to pre populate your database.
However to answer your question yes you can store the data in a plist. Assuming the initial data is stored in the bundle and is an array of dictionaries here is some example code.
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:@"books.plist"];
NSMutableArray* info = nil;
// Attempt to load saved data from the documents directory
if ([[NSFileManager defaultManager] fileExistsAtPath:path]){
info = [NSMutableArray arrayWithContentsOfFile:path];
}else{
// No saved data in documents directory so we need to load the data from the bundle
NSString* bundlePath = [[NSBundle mainBundle] pathForResource:@"books" ofType:@"plist"];
info = [NSMutableArray arrayWithContentsOfFile:bundlePath];
}
//...
// Toggle check box for book 0
if ([info[0][@"checkbox"] boolValue]){
info[0][@"checkbox"] = @NO;
}else{
info[0][@"checkbox"] = @YES;
}
// Note: @"checkbox" does not need to be in the original plist
[info writeToFile:path atomically:YES];
Update: I have created a gist for you to help you load the data into a table view controller https://gist.github.com/datinc/9075686