Ben değerleri var ayarlayarak, dokümantasyon veya yeni yönetilen nesne oluşturma örneklerini bulmak çok zor bir zaman geçiriyor ve Restkit kullanarak sunucuya biriktiriyorum.Restkit 0.20.0 kullanarak yeni yönetilen bir nesneyi sunucuya nasıl oluşturabilirim/yayınlarım?
Bir NSManagedObject Mesaj var:
@interface Post : NSManagedObject
@property (nonatomic, retain) NSNumber * postID;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * text;
@end
Bu benim AppDelegate Kur: Ben benim benim gezinme çubuğu var "Kaydet" düğmesini tıkladığında benim NewPostViewController olarak, Şimdi
// ---- BEGIN RestKit setup -----
RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);
NSError *error = nil;
NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"My_App" ofType:@"momd"]];
// NOTE: Due to an iOS 5 bug, the managed object model returned is immutable.
NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] mutableCopy];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
// Enable Activity Indicator Spinner
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
// Initialize the Core Data stack
[managedObjectStore createPersistentStoreCoordinator];
NSPersistentStore __unused *persistentStore = [managedObjectStore addInMemoryPersistentStore:&error];
NSAssert(persistentStore, @"Failed to add persistent store: %@", error);
[managedObjectStore createManagedObjectContexts];
// Configure a managed object cache to ensure we do not create duplicate objects
managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];
// Set the default store shared instance
[RKManagedObjectStore setDefaultStore:managedObjectStore];
// Configure the object manager
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://localhost:3000/api/v1"]];
objectManager.managedObjectStore = managedObjectStore;
NSString *auth_token = [[LUKeychainAccess standardKeychainAccess] stringForKey:@"auth_token"]; // Getting the Auth_Token from keychain
[objectManager.HTTPClient setAuthorizationHeaderWithToken:auth_token];
[RKObjectManager setSharedManager:objectManager];
// Setup Post entity mappping
RKEntityMapping *postMapping = [RKEntityMapping mappingForEntityForName:@"Post" inManagedObjectStore:managedObjectStore];
[postMapping addAttributeMappingsFromDictionary:@{
@"title": @"title",
@"text": @"text",
@"id": @"postID"}];
RKResponseDescriptor *postResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:postMapping pathPattern:nil keyPath:@"post" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:postResponseDescriptor];
ne Bu gönderiyi sunucuma kaydetmek için ne yapmam gerekiyor?
İşte çalıştığım buydu, ancak doğru çalışmıyor. Ben başarı bloğu girip benim sunucu POST var, ama alanlar nil şunlardır: Eğer nesne yöneticisine herhangi RKRequestDescriptor 's eklememiş gibi
- (void)savePost {
RKManagedObjectStore *objectStore = [[RKObjectManager sharedManager] managedObjectStore];
Post *post = [NSEntityDescription insertNewObjectForEntityForName:@"Post" inManagedObjectContext:objectStore.mainQueueManagedObjectContext];
[post setTitle:@"The Title"];
[post setText:@"The Text"];
[[RKObjectManager sharedManager] postObject:post path:@"posts" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"Success saving post");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Failure saving post: %@", error.localizedDescription);
}];
}
Eşleme sonucu nesnesini kaydeder misin? –
Sunucum yeni oluşturulan Gönderi ile yanıt veriyor, ancak hem başlık hem de metin için sıfır. Raylarım çıkış konsolunu kontrol etmek POST isteğini alır, ancak metin ve başlık sıfırdır. – sbonkosky
Onlara erişmeyi denediniz mi? CoreData tembel olarak yükleniyor olabilir. –