Created
April 5, 2012 18:17
-
-
Save FlaviuSim/2312969 to your computer and use it in GitHub Desktop.
appFinishLaunchingWithOptions for seeding your CoreData with RestKit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { | |
// Initialize RestKit | |
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://twitter.com"]; | |
// Enable automatic network activity indicator management | |
objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; | |
// Initialize object store | |
#ifdef RESTKIT_GENERATE_SEED_DB | |
NSString *seedDatabaseName = nil; | |
NSString *databaseName = RKDefaultSeedDatabaseFileName; | |
#else | |
NSString *seedDatabaseName = RKDefaultSeedDatabaseFileName; | |
NSString *databaseName = @"RKTwitterData.sqlite"; | |
#endif | |
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:databaseName usingSeedDatabaseName:seedDatabaseName managedObjectModel:nil delegate:self]; | |
/*! | |
Map to a target object class -- just as you would for a non-persistent class. The entity is resolved | |
for you using the Active Record pattern where the class name corresponds to the entity name within Core Data. | |
Twitter status objects will be mapped onto RKTStatus instances. | |
*/ | |
RKManagedObjectMapping* statusMapping = [RKManagedObjectMapping mappingForClass:[RKTStatus class]]; | |
statusMapping.primaryKeyAttribute = @"statusID"; | |
[statusMapping mapKeyPathsToAttributes:@"id", @"statusID", | |
@"created_at", @"createdAt", | |
@"text", @"text", | |
@"url", @"urlString", | |
@"in_reply_to_screen_name", @"inReplyToScreenName", | |
@"favorited", @"isFavorited", | |
nil]; | |
// Register our mappings with the provider | |
[objectManager.mappingProvider setMapping:statusMapping forKeyPath:@"status"]; | |
#ifdef RESTKIT_GENERATE_SEED_DB | |
RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelInfo); | |
RKLogConfigureByName("RestKit/CoreData", RKLogLevelTrace); | |
RKManagedObjectSeeder* seeder = [RKManagedObjectSeeder objectSeederWithObjectManager:objectManager]; | |
// Seed the database with instances of RKTStatus from a snapshot of the RestKit Twitter timeline | |
[seeder seedObjectsFromFile:@"restkit.json" withObjectMapping:statusMapping]; | |
// Finalize the seeding operation and output a helpful informational message | |
[seeder finalizeSeedingAndExit]; | |
// NOTE: If all of your mapped objects use keyPath -> objectMapping registration, you can perform seeding in one line of code: | |
// [RKManagedObjectSeeder generateSeedDatabaseWithObjectManager:objectManager fromFiles:@"users.json", nil]; | |
#endif | |
// Create Window and View Controllers | |
RKTwitterViewController* viewController = [[[RKTwitterViewController alloc] initWithNibName:nil bundle:nil] autorelease]; | |
UINavigationController* controller = [[UINavigationController alloc] initWithRootViewController:viewController]; | |
UIWindow* window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; | |
[window addSubview:controller.view]; | |
[window makeKeyAndVisible]; | |
return YES; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment