2012-11-13 1 views
2

GoogleDrive Objective-C SDK를 사용하고 있는데 문제가 있습니다. 경로 -> ID 매핑 구조를 만들고 싶습니다. 그래서 드라이브에 모든 사용자 파일 목록을 요청합니다. 일반적으로 이것은 정상적으로 작동합니다. 그러나 사용자가 매우 많은 양의 파일을 가지고있는 경우 서버는 내부 오류를 반환합니다. GTLQueryDrive의 maxResults 속성을 더 낮은 숫자로 설정하여이 문제를 해결할 수 있습니다. 그렇게하면 GTLDriveFileList의 nextPageToken (및 nextLink) 속성이 nil이 아닌 것을 제외하고 모든 것이 예상대로 작동합니다. 파일 정보를 계속 잡으려면이 nextPageToken이 필요하다고 생각합니다. 내 쿼리의 fields 속성을 nil로 설정하려고했습니다. nextPageToken이 포함 된 문자열과 nextPageToken을 포함하지 않는 문자열입니다. nextPageToken 속성은 모든 경우에 nil 인 것으로 보입니다. 제가 누락 된 것이 있습니까? 감사!다음 페이지 토큰 및 파일 목록 쿼리

+0

샘플 코드를 게시하여 게시 할 수 있습니까? 또한 shouldFetchNextPages를 YES 또는 NO로 설정했는지 확인할 수도 있습니다. YES이면 코드를 실행할 때 각 페이지를 자동으로 검색합니다. 이 경우 nextPageToken을 사용할 수 없습니다. –

+0

답장을 보내 주셔서 감사합니다. 나는 shouldFetchNextPages에 대해 잊어 버렸습니다. 나는 YES로 설정했지만 여분의 정보를 가져 오지는 않는다. (예를 들어 maxResults를 X로 설정하면 X 이상의 파일이 있어도 콜백에서 X 결과 만 얻는다.) – garrettm

+0

좋아, 나는 stackoverflow에 나쁘다. 여기 내 전체 회신 : 답장을 보내 주셔서 감사합니다! 나는 shouldFetchNextPages에 대해 잊어 버렸습니다. 나는 YES로 설정했지만 여분의 정보를 가져 오지는 않는다. (예를 들어 maxResults를 X로 설정하면 X 이상의 파일이 있어도 콜백에서 X 결과 만 얻는다.) 내가 놓친 게 있니? 필자는 설명서를 검토하여 나머지 데이터가 티켓이나 fileList에 다른 방식으로 첨부되어 있는지 확인할 수 있었지만 아무 것도 찾을 수 없었습니다. shouldFetchNextPages를 해제하면 nextPageToken을 제대로 볼 수 있습니다. – garrettm

답변

0

의견 사슬을 기반으로 답변을 추가합니다.

다음은 실험 할 수있는 약간의 샘플입니다.

driveService.shouldFetchNextPages = YES; 

GTLQueryDrive *query = [GTLQueryDrive queryForFilesList]; 
query.maxResults = 5; 
// queryTicket can be used to track the status of the request. 
[driveService executeQuery:query 
    completionHandler:^(GTLServiceTicket *ticket, GTLDriveFileList *files, 
         NSError *error) { 
     if (files) { 
      NSLog(@"Have response %@", files.items); 
      NSLog(@"Token %@", files.nextPageToken); 
      NSLog(@"Count %d", files.items.count); 
     } 
    }]; 

shouldFetchNextPages를 YES로 설정하면 결과에 nextPageToken이 포함되지 않습니다. 를 설정하면

Executing drive.files.list required fetching 4 pages; use a query with a larger maxResults for faster results 

대신, 당신은 아직도의 라인을 따라 뭔가를 보일 것 로그 파일의 메시지와 함께 전체 목록을 얻을 것이다 당신이 (에서 maxResults 기준) 5 개 이상의 파일이있는 가정 shouldFetchNextPages를 NO로 설정하면 결과는이 경우 5 개의 결과로 제한되고 nextPageToken은 결과 집합의 다음 페이지를 가져 오기위한 유효한 토큰을 갖습니다.

+0

안녕하세요. Steve, 감사합니다. 이. query.fields = @ "kind, etag, items (id, labels, downloadUrl, exportLinks, originalFilename, title, kind, mimeType, userPermission, modifiedDate, 부모, fileExtension) "; shouldFetchNextPages NO를 사용하면 필드에 nextPageToken을 포함하고 모든 것이 잘 작동합니다. 하지만 maxResults를 5로 설정하면 파일 목록에 5 개의 결과 만 표시됩니다. – garrettm

+0

그래, shouldFetchNextResults가 작동하려면 nextPageToken이 필요하다는 것이 문제였습니다. 이것은 다소 혼란 스럽습니다. 결국 shouldFetchNextResults를 YES로 설정하여 블록 콜백을 얻었을 때 nextPageToken은 nil입니다. 더 이상 페이지가 없기 때문입니다 (duh). 그러나 이것은 나를 현장에서 필요로하지 않는다고 생각하게 만들었습니다. 모든 것이 이제는 잘되고 있습니다. 도와 줘서 고마워, 미안해! – garrettm

+0

문서에 따르면 쿼리는 shouldFetchNextResults를 사용할 때 다음 페이지를 최대 25 페이지까지 가져옵니다. 따라서 전체 목록을 얻을 것이라고 말하는 것은 정확하지 않습니다. 전체 목록이 페이지 당 25 * 결과보다 작은 경우에만 전체 목록을 얻을 수 있습니다. –