2013-05-22 30 views
1

我試圖設置RKRoute以使用RestKit從Dropbox API獲取文件夾內容。以「/」作爲參數的RKRoute不起作用

獲取內容的URL是https://api.dropbox.com/1/metadata/dropbox/<path>

所以我設置了這樣的反應和路線:

// objectManagers baseURL is @"https://api.dropbox.com/1/" 
RKResponseDescriptor *rootResponse = [RKResponseDescriptor responseDescriptorWithMapping:dynamicMapping pathPattern:@"metadata/dropbox:path" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 
[objectManager.router.routeSet addRoute:[RKRoute routeWithClass:[DropboxFolder class] pathPattern:@"metadata/dropbox:path" method:RKRequestMethodGET]]; 
// dropboxFolder.path is @"/" for root 
// dropboxFolder.path is @"/Images" for the "Images"-folder contained in root 

但隨後的路徑匹配失敗在[RKPathMather matchesPath:tokenizeQueryStrings:parsedArguments:因爲有斜槓的數量進行檢查這樣的:RKNumberOfSlashesInString(self.patternString) == RKNumberOfSlashesInString(self.rootPath)

映射作品,當我註釋掉這個檢查時,但我確定它在其他一些情況下是需要的。

回答

1

正確的方法是使用2個不同的響應描述符和路由。斜槓對於RestKit能夠正確區分不同的URL,路徑和模式非常重要。您可以使用相同的映射,因此它只是另外幾行配置。

+0

感謝您的回答。配置1路由'metadata/dropbox:path'和2個響應描述符'metadata/dropbox /'和'metadata/dropbox /:pathWithoutSlash'爲我工作。正如你所看到的,我想,我需要實現一個自定義屬性'pathWithoutSlash',這不是那麼美觀和乾淨。但它有效,所以謝謝。 – Pipo

1

我想我找到了我的問題一個清晰的解決方案:

我配置我的響應描述和路線是這樣的:

RKResponseDescriptor *rootResponse = [RKResponseDescriptor responseDescriptorWithMapping:dynamicMapping pathPattern:@"metadata/dropbox/:path" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 
RKRoute *route = [RKRoute routeWithClass:[DropboxFolder class] pathPattern:@"metadata/dropbox/:path" method:RKRequestMethodGET]; 
route.shouldEscapePath = YES; 
[objectManager.router.routeSet addRoute:route]; 

現在,它的工作原理與1個響應描述符和1路。我不知道這是否可以與使用路徑的其他API協同工作,但可以與Dropbox一起使用。 (根目錄的URL現在是https://api.dropbox.com/1/metadata/dropbox/%2F