Restkit の RKObjectManager と RKObjectMapping を使用して、GET で Web サービスから JSON データを正常に取得しています。これが私のコードです:
- (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];
}
上記のコードは機能しており、返されたデータを喜んで処理しています。ただし、データベースに挿入するレコードを POST できません。私は、sharedManager と、場合によってはマッピングを再利用できると思います。私は返品を処理する必要はありません。
次のスニペットのさまざまなバリエーションを試しました。無駄に。
最初のスニペットは、マネージャーとマッピングを再利用する試みです。この疑似コードのマッピング スコープを無視すると、正しい URL リソース (baseURL & '/insert_marker.php') に POST する方法がわからないという明らかな欠陥があります。だから私は実際にこれを試していません:
- (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];
}
この 2 番目のスニペットは実行されますが、アプリがクラッシュします。明らかに、これは string 型と 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 を再利用し、おそらくマッピングを使用し、戻り値を処理しません)。