2017-09-12 11 views
8

UIViewController 내 구문 분석 서버를 쿼리하려고하지만이 클래스에 개체가있는 100 % 알지만 그래도 0 반환을 계속. 이견있는 사람?PFQuery FindObjectsInBackground 반환 0

PFQuery *query = [PFQuery queryWithClassName:@"General"]; 

int i; 
for (i = 0; i < [follows count]; i++) { 
     [query whereKey:@"Session" containedIn:follows]; 
} 
query.cachePolicy = kPFCachePolicyCacheThenNetwork; 

[query orderByDescending:@"createdAt"]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
// it never gets here... 
NSLog(@"OBJECTS%@", objects); 
if (!error) { 
    NSLog(@"Successfully retrieved %lu objects.", (unsigned long)objects.count); 
    for (PFObject *object in objects) { 
     NSLog(@"%@", object.objectId); 
    } 

    // [self gotoMain]; 
} else { 
     NSLog(@"Error: %@ %@", error, [error userInfo]); 
    } 
}]; 

내 콘솔에 0 개의 개체를 성공적으로 가져 오는 데 오류가 없다고 알려줍니다. 0 객체를 반환,이 오류없이 실행하면

PFQuery *query = [PFQuery queryWithClassName:@"General"]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
if (!error) { 
    NSLog(@"Successfully retrieved %lu objects.", (unsigned long)objects.count); 
} else { 
     NSLog(@"Error: %@ %@", error, [error userInfo]); 
    } 
}]; 

, 대시 보드는 반환되어야 개체, 클래스가 있음을 보여줍니다 기타로

+0

cachePolicy 라인 제거를 시도해 보셨습니까? – jaynp

+0

예, 변경 안 함 @jaynp – user717452

+0

작동하지 않는 가장 단순한 예제는 무엇입니까? 예를 들어'whereKey'와'orderBy'도 제거해보십시오. 다른 클래스 이름으로 시도하십시오. 이렇게하면 문제를 정확히 파악하는 데 도움이됩니다. – jaynp

답변

1

이미 내가 먼저 간단한 쿼리를 할 것이라고 제안 이름이 잘못되어 있어야합니다. 클래스 이름을 다시 확인하십시오. 철자법.

개체가 반환되면 필터가 잘못되어 있어야합니다. for은 두 가지 이유로 어디서든 잘못되었습니다.
1) for 루프는 follows.count 번 실행되지만 index은 사용되지 않으므로 항상 동일한 명령어를 실행합니다. 당신은 단지 하나의 필터 whereKey:containedIn:을 가질 수 있기 때문에 나는

for (i = 0; i < [follows count]; i++) { 
     [query whereKey:@"Session" containedIn:follows[i]]; 
} 

2)이 잘못 당신이 쓰고 싶다 (을하지만,이 또한 잘못입니다) 추측. DevKyle이 언급 한 것처럼이 단일 필터는 follows.count-1 번을 덮어 쓰며 마지막 필터 만 사용됩니다.
개별 필터의 논리 OR과 같은 것을 사용하고 싶습니다. 그렇다면, 당신은, 즉 당신 배열을 평평하게 follows[i]에있는 모든 요소의 단일 배열 NSArray *flattenedFollows을, here을 볼 수 있었고, 하나의 필터

[query whereKey:@"Session" containedIn: flattenedFollows]; 

편집 한 후 설정 :
마지막 생각 : 만약 당신의 쿼리가 올바른지 (for 루프 이외) 어쨌든 반환되는 객체가 없으면 액세스 할 권한이없는 것일 수 있습니다. 따라서이 레코드의 ACL 필드에 올바른 액세스 권한이 있는지 확인하십시오.

+0

클래스 이름은 괜찮습니다, 필터는 괜찮습니다. 그리고 나는 이미 수많은 시간 언급했듯이 필터없이 시도했습니다. 이 정확히 동일한 코드는 문제없이 PFQueryTableViewController의 다른 곳에서 사용됩니다. 그리고 대리인이 설정되어 있음에도 불구하고 일반 UIViewController에서 사용하는 것이 문제입니다. – user717452