2014-02-13 6 views
1

"워크 아웃"사용자 개체를 반환하기 위해 반입 요청을 실행하려고합니다.Stackmob이 오류없이 페치 요청을 실행하지 않습니다.

두 개 이상의 컨트롤러에서이 메서드가 필요하므로 자체 클래스로 옮겼습니다. 그러나 컨트롤러에서 다음 클래스를 다른 클래스로 이동하면 onSuccess 또는 onFailure이 실행되지 않습니다. 오류없이 빈 배열이 반환됩니다. 나는 그것과 관련이있는 경우를 대비해 managedObjectContext을 매개 변수로 넣으려고 시도했다.

self.managedObjectContext = [[self.appDelegate coreDataStore] 
contextForCurrentThread]; 

클래스의 방법은 다음과 같이 선언 :로

managedObjectContext 는 선언

-(NSArray*)getUserRecord:(NSManagedObjectContext *)managedObjectContext 
{ 

NSFetchRequest *userFetch = [[NSFetchRequest alloc] initWithEntityName:@"User"]; 

[managedObjectContext executeFetchRequest:userFetch 
            onSuccess:^(NSArray *results) 
{ 
    NSLog(@"Results %@", results); 
    self.fetchedRecordsArray= [[NSMutableArray alloc] initWithArray:results]; 
    NSLog(@"Fetched Array %@", self.fetchedRecordsArray); 
} 

            onFailure:^(NSError *error) 
{ 
    NSLog(@"DATABASE ERROR: %@", error); 
    [[[UIAlertView alloc]initWithTitle:@"DATABASE ERROR" message:@"FATAL-unable to fetch workout object" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; 
}]; 

return self.fetchedRecordsArray; 

}

가 왜 실행되지 onSuccess 또는 onFailure입니까?

답변

1

함수가 반환 할 때 self.fetchedRecordsArray는 블록 특성으로 인해 항상 nil이됩니다. .H 파일에

다음과 같이 선언 :

- (void)getUserRecordWithContext:(NSManagedObjectContext *)managedObjectContext 
      success:(void (^)(NSArray * users))success 
      failure:(void (^)(NSError * error))failure; 

그리고하는 .m 파일에서 구현 :

- (void)getUserRecordWithContext:(NSManagedObjectContext *)managedObjectContext 
      success:(void (^)(NSArray * users))success 
      failure:(void (^)(NSError * error))failure; 
{ 

NSFetchRequest *userFetch = [[NSFetchRequest alloc] initWithEntityName:@"User"]; 

[managedObjectContext executeFetchRequest:userFetch 
            onSuccess:^(NSArray *results) 
{ 
    NSLog(@"Results %@", results); 
    self.fetchedRecordsArray= [[NSMutableArray alloc] initWithArray:results]; 
    NSLog(@"Fetched Array %@", self.fetchedRecordsArray); 
    success(results); 
} 

            onFailure:^(NSError *error) 
{ 
    NSLog(@"DATABASE ERROR: %@", error); 
    failure(error); 
}]; 

}

봅니다 다음을 수행합니다 이제이 함수를 호출하면 결과를 완료 할 수 있습니다.