0

postObjectRestKitでこのメソッドを使用すると、ログからすべて問題がないように見えます(以下を参照)。

ただし、サーバーでは、要求はとして受信されGET、要求の本文は空でありPOST、シリアル化されたオブジェクトが含まれているのではありません。

2013-01-12 14:40:08.860 AppName[3953:c07] I restkit.network:RKHTTPRequestOperation.m:152 POST 'http://urlgoeshere.com'

以下は、POSTとRestKitの初期化に使用しているコードです。RestKit0.20.0-pre6を使用しています。

サーバーへのPOSTオブジェクト

// CREATE THE MANAGED OBJECT, AND SAVE IT
RKManagedObjectStore *objectStore = [[RKObjectManager sharedManager] managedObjectStore];
Message *msg = [NSEntityDescription insertNewObjectForEntityForName:@"Message" inManagedObjectContext:objectStore.mainQueueManagedObjectContext];
msg.note = @"This is a sample message.";
msg.dateCreated = [NSDate date];
[objectStore.mainQueueManagedObjectContext save:nil];

// BUILD THE REQUEST MAPPING & REQUEST DESCRIPTOR
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];
[requestMapping addAttributeMappingsFromDictionary:@{
 @"messageId": @"id",
 @"dateCreated": @"date_created",
 }];
[requestMapping addAttributeMappingsFromArray:@[ @"note" ]];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[Message class] rootKeyPath:@"message"];
[[RKObjectManager sharedManager] addRequestDescriptor:requestDescriptor];

// SEND POST REQUEST TO SERVER
[[RKObjectManager sharedManager] postObject:msg
                                       path:@"/path/to/messages"
                                 parameters:[NSDictionary dictionaryWithObject:[(AppDelegate*)[[UIApplication sharedApplication] delegate] userId] forKey:@"user_id"]
                                    success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                                        NSLog(@"success!");
                                    }
                                    failure:^(RKObjectRequestOperation *operation, NSError *error) {
                                        NSLog(@"failure.\n\n%@", [error description]);
                                    }
 ];

アプリデリゲートでのRestKitの初期化

NSURL *baseURL = [NSURL URLWithString:@"http://urlgoeshere.com"];
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:baseURL];

// Initialize managed object store
NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
objectManager.managedObjectStore = managedObjectStore;

// Setup our object mappings    
RKEntityMapping *messageMapping = [RKEntityMapping mappingForEntityForName:@"Message" inManagedObjectStore:managedObjectStore];
messageMapping.identificationAttributes = @[ @"messageId" ];
[messageMapping addAttributeMappingsFromDictionary:@{
 @"id": @"messageId",
 @"date_created": @"dateCreated",
 }];
[messageMapping addAttributeMappingsFromArray:@[ @"note" ]];

[managedObjectStore createPersistentStoreCoordinator];
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"DBNameHere.sqlite"];
NSError *error;
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:&error];
NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);

// Create the managed object contexts
[managedObjectStore createManagedObjectContexts];

// Configure a managed object cache to ensure we do not create duplicate objects
managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];
4

1 に答える 1

1

どんなサーバーと話しているの?あなたのサーバーがリダイレクトか何かをしているのではないかと思います。RestKitはNSURLConnectionを使用してリクエストを作成します。したがって、ログに報告された内容がNSURLRequestから直接読み取られるため、問題がクライアント側にある可能性はほとんどありません。

于 2013-01-12T21:22:21.540 に答える