Ios 如何通过RestKit 0.20发布到数据库

Ios 如何通过RestKit 0.20发布到数据库,ios,json,restkit,afnetworking,Ios,Json,Restkit,Afnetworking,我正在尝试使用restkit发布到API。 当我按下save post(保存帖子)时,会出现一个错误,显示一条空帖子,并提示: Expected status code in (200-299), got 422" UserInfo=0xb83ca20 {NSLocalizedRecoverySuggestion={"body":["can't be blank"]}, 帖子显示在tableView中,但我输入的文本无法进入数据库。 你知道为什么会这样吗?我看到的常见问题是,人们缺少将数据解

我正在尝试使用restkit发布到API。 当我按下save post(保存帖子)时,会出现一个错误,显示一条空帖子,并提示:

Expected status code in (200-299), got 422" UserInfo=0xb83ca20 {NSLocalizedRecoverySuggestion={"body":["can't be blank"]}, 
帖子显示在tableView中,但我输入的文本无法进入数据库。 你知道为什么会这样吗?我看到的常见问题是,人们缺少将数据解析为json的功能,或者因为他们缺少responseDescriptor——但我有这个功能,我没有得到json错误。它只是没有保留我输入的文本。 为什么会这样

我的savePost方法如下

RKManagedObjectStore *objectStore = [[RKObjectManager sharedManager] managedObjectStore];
Post *post = [NSEntityDescription insertNewObjectForEntityForName:@"Post" inManagedObjectContext:objectStore.mainQueueManagedObjectContext];
[post setBody:self.postTextField.text];
[objectStore.mainQueueManagedObjectContext save:nil];

RKObjectManager *manager = [RKObjectManager sharedManager]; [manager postObject:self path:@"/posts.json" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    NSLog(@"Success saving post");
   // [MUser setCurrentUser:self];
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSLog(@"Failure saving post: %@", error.localizedDescription);
}];
在我的appDelegate中,我有以下设置:

 NSError *error = nil;
    NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Markofresh" 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];

    // 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:@"https://fierce.herokuapp.com"]];
    objectManager.managedObjectStore = managedObjectStore;
    [objectManager setRequestSerializationMIMEType:@"application/json"];
    [objectManager setAcceptHeaderWithMIMEType:@"application/json"];


    [RKObjectManager setSharedManager:objectManager];
    //setup Post Entity map
    RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"Post" inManagedObjectStore:managedObjectStore];
    [entityMapping addAttributeMappingsFromDictionary:@{
     @"id":             @"postID",
     @"url":            @"jsonURL",
     @"body":           @"body",
     @"created_at":     @"createdAt"}];
    entityMapping.identificationAttributes = @[ @"postID" ];

    [RKObjectManager sharedManager].requestSerializationMIMEType = RKMIMETypeJSON;

    RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping pathPattern:@"/posts.json" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    [objectManager addResponseDescriptor:responseDescriptor];

    RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[entityMapping inverseMapping] objectClass:[Post class] rootKeyPath:@"/posts.json"];
    [objectManager addRequestDescriptor:requestDescriptor];
我曾看到其他人对此挂断了电话,想知道AFNetworking是否是这种简单方法的更好选择,而且还有更多关于它的文档。 我知道我想做的很简单,我不明白是什么导致了这篇空文。如果您有任何帮助,我们将不胜感激。

您应该:

[manager postObject:post path:@"/posts.json" parameters:nil  ...
那么你的问题只是一个打字错误


尝试打开映射跟踪日志记录,以便查看发生的情况:

RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace);

想一想类似的东西,告诉你到底是什么击中了电线。

我有“post”还是“self”似乎没有什么区别——我也有同样的错误。我认为可能是参数为零——我应该像rails一样为post或body.text传递一个参数——但我还没有找到一种方法来实现这一点,所以我可能走错了方向。还有其他想法吗?所以我已经在appDelegate文件中有了RKLogLevelTrace,当我将它复制到Post文件时,当它获得数据时,我会得到一个更详细的日志,但来自失败Post的响应相同。正如你所说,我得到了CharlesProxy,我需要一秒钟来理解它,但我能看到的是,我提出了5个不完整的请求-虽然我不确定它们到底有多不完整..因此Charles允许你详细查看你发送的请求和收到的响应。因此,您可以看到所有标题以及GET和POST的全文。您需要知道服务器显然期望什么,但它提供了一种方法来验证正在传输的真实数据。