2013-04-08 67 views
0

目前我正在使用使用RestKit進行通信的iOS應用程序。 我成功檢索並添加了數據。但是從數據庫更新和刪除數據不起作用。RestKit刪除和更新功能不起作用

我用下面的代碼添加新條目的數據庫:

[[RKClient sharedClient] get:@"/tblTests" delegate:self]; 
RKObjectMapping *venueMapping = [RKObjectMapping mappingForClass:[Venue class]]; 
RKURL *baseURL = [RKURL URLWithBaseURLString:@"http://10.10.3.101/WcfService1/WcfDataService1.svc/"]; 
RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:baseURL]; 
objectManager.client.baseURL = baseURL; 

[venueMapping mapKeyPathsToAttributes:@"Name",@"name", nil]; 
[objectManager.mappingProvider setMapping:venueMapping forKeyPath:@"value"]; 
[objectManager loadObjectsAtResourcePath:@"/tblTests/" delegate:self]; 
RKObjectMapping* venueMappingS = [RKObjectMapping mappingForClass:[Venue class]]; 
venueMappingS.setDefaultValueForMissingAttributes = YES; 
[venueMappingS mapKeyPath:@"Name" toAttribute:@"name"]; 

RKObjectRouter *router = [[RKObjectRouter alloc] init]; 
[router routeClass:[Venue class] toResourcePath:@"/tblTests/"]; 
[router routeClass:[Venue class] toResourcePath:@"/tblTests/" forMethod:RKRequestMethodPOST]; 

[[[RKObjectManager sharedManager] mappingProvider] setMapping:venueMappingS forKeyPath:@"value"]; 
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[venueMappingS inverseMapping] forClass:[Venue class]]; 
[RKObjectManager sharedManager].router = router; 
[RKObjectManager sharedManager].serializationMIMEType = RKMIMETypeJSON; 
[RKObjectManager sharedManager].acceptMIMEType = RKMIMETypeJSON; 

Venue *venueName = [[Venue alloc] init]; 
venueName.name = @"Midhun MP"; 
venueName.Id = 12; 
[[RKObjectManager sharedManager] postObject:venueName delegate:self]; 

它完美,然後我用同樣的代碼只有這兩條線改變:

[router routeClass:[Venue class] toResourcePath:@"/tblTests/" forMethod:RKRequestMethodPOST]; 
[[RKObjectManager sharedManager] postObject:venueName delegate:self]; 

[router routeClass:[Venue class] toResourcePath:@"/tblTests/" forMethod:RKRequestMethodDELETE]; 
[[RKObjectManager sharedManager] deleteObject:venueName delegate:self]; 

這不工作!

我的地點類:

@interface Venue : NSObject 

@property (strong, nonatomic) NSString *name; 
@property (nonatomic) int Id; 

@end 

我的JSON的樣子:

{"value":[{"Id":1,"Name":"Midhun"},{"Id":12,"Name":"Midhun MP"}]} 

我找不到任何問題,請幫助我。

回答

1

當你更新/刪除一個對象並使用一個平靜的Web服務時,你需要知道哪個對象(帶有它的ID)應該被更新。在RestKit中,您可以通過告訴路由器使用給定的:attribute來實現此目的。

[router routeClass:[Venue class] toResourcePath:@"/tblTests/:Id" forMethod:RKRequestMethodPOST]; 

BTW看起來像你使用RestKit 0.10即將過時。更新到0.20,並找到一些更簡單的方法和塊的使用將會更容易。

+0

我試過了,得到如下錯誤:**錯誤:操作無法完成。 (org.restkit.RestKit.ErrorDomain error 4。)** – 2013-04-09 04:49:45

+0

您可以使用RKLogConfigureByName(「RestKit/*」,RKLogLevelTrace); //添加到AppDelegate',再次嘗試併發布完整的錯誤消息(跟蹤)作爲補充做你的答案? – flashfabrixx 2013-04-12 13:45:27

+0

'[router routeClass:[Venue class] toResourcePath:@「/ tblTests /:Id \\ .json」forMethod:RKRequestMethodDELETE];'你應該確保你的資源路徑是有效的,並且使用正確的HTTP方法。上面的錯誤可能是因爲你的資源url不正確。 – masam 2013-05-23 11:02:06