我正在使用Restkit的RKObjectManager和RKObjectMapping从GET服务使用GET成功检索JSON数据。这里是我的代码:使用RKObjectManager从INSERT的IOS进行POST
- (void)viewDidLoad
{
[super viewDidLoad];
RKURL *baseURL = [RKURL URLWithBaseURLString:@"http://192.168.1.12"];
RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:baseURL];
objectManager.client.baseURL = baseURL;
RKObjectMapping *markerMapping = [RKObjectMapping mappingForClass:[Marker class]];
[markerMapping mapKeyPath:@"la" toAttribute:@"lat"];
[markerMapping mapKeyPath:@"lo" toAttribute:@"lon"];
[markerMapping mapKeyPath:@"des" toAttribute:@"description"];
[objectManager.mappingProvider setMapping:markerMapping forKeyPath:@"markers"];
}
- (void)sendGet
{
NSString *lat = @"53.334932";
NSString *lon = @"-0.543749";
NSString *dist = @"1000";
NSDictionary *queryParams;
queryParams = [NSDictionary dictionaryWithObjectsAndKeys:lat, @"la", lon, @"lo", dist, @"d", nil];
RKObjectManager *objectManager = [RKObjectManager sharedManager];
RKURL *URL = [RKURL URLWithBaseURL:[objectManager baseURL] resourcePath:@"/get_markers.php" queryParameters:queryParams];
[objectManager loadObjectsAtResourcePath:[NSString stringWithFormat:@"%@?%@", [URL resourcePath], [URL query]] delegate:self];
}
上面的代码工作,我很高兴地处理返回的数据。但是,我无法发布要插入数据库的记录。我想我可以重复使用sharedManager,甚至可能映射。我不需要处理任何回报。
我已经尝试了以下片段的众多变体。无济于事。
第一个片段是试图重用管理器和映射。忽略这个伪代码中的映射范围,明显的缺陷是我无法确定如何POST到正确的URL资源(baseURL &'/insert_marker.php')。所以我没有尝试过:
- (void)postInsert
{
Marker *mkr = [Marker alloc];
mkr.lat = @"53.334933";
mkr.lon = @"-0.543750";
mkr.description = @"some words";
RKObjectManager *objectManager = [RKObjectManager sharedManager];
[objectManager.mappingProvider setSerializationMapping:[markerMapping inverseMapping] forClass:[Marker class]];
[[RKObjectManager objectManager] postObject:mkr delegate:nil];
}
这第二个代码段会运行但会崩溃应用程序。很明显,这是字符串和url类型之间的混淆,但对象管理器的帖子不会用url编译。我很困扰!
- (void)postInsert
{
RKParams* params = [RKParams params];
[params setValue:@"53.334933" forParam:@"la"];
[params setValue:@"-0.543750" forParam:@"l0"];
[params setValue:@"some words" forParam:@"des"];
RKObjectManager *objectManager = [RKObjectManager sharedManager];
NSString *URL = [RKURL URLWithBaseURL:[objectManager baseURL] resourcePath:@"/add_marker.php"];
[objectManager.client post:URL params:params delegate:nil];
}
那么,我怎么能用PARAMS POST(希望重新使用sharedManager,也许映射和不处理返回)?
你可以添加错误吗? – clopez 2012-07-31 18:22:23
我对Xcode是如此的陌生以至于我不确定如何检索有关错误的有用信息。它在'main'报告“Thread1 Signal SIGBRT”中停止。有什么用? – Polly 2012-07-31 18:34:04
以显示真正的异常尝试使用BreakPoint Navigator上的“All Exception BreakPoint”。 – clopez 2012-07-31 18:36:02