2014-04-28 1 views
2

에서 업데이트되지 않습니다 : 데이터가 올바르게 반환됩니다속성이 뭔가 가져 클래스에서이 SNIPPIT이 내부 블록

interface: 
@property (nonatomic, strong) Firebase *firebase; 
@property (nonatomic, strong) NSMutableDictionary *offlineCopy 


implementation: 
//...connection code...\\ 

- (void)offlineCopyForEvent:(NSString *)event { 
    [self.firebase observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) { 
     if ([snapshot.value isKindOfClass:[NSDictionary class]]) { 
      NSDictionary *copy = snapshot.value; 

      self.offlineCopy = [copy mutableCopy]; 

      NSLog(@"%@", copy); 
     } 

    }]; 
} 

를 (로그는 결과를 보여줍니다). 그러나 위 코드를 사용하여 속성을 설정 한 후에 속성에 액세스하려고하면 nil이 반환됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+2

방법은 속성을 설정하지 않습니다. 그것은 'self.firebase'를 속성으로 설정된 블록으로 취급합니다. 'self.firebase'는'-offlineCopyForEvent :'가 리턴 된 후 나중에 비동기 적으로 블록을 실행합니다. –

+1

블록의 NSLog가 속성을 읽기 전에 실행되는지 확인할 수 있습니다. 속성은 그때까지 설정되어 있어야합니다. 맞습니까? – dododedodonl

답변

0

시도 :

- (void)offlineCopyForEvent:(NSString *)event { 
    __weak YourViewController weakSelf = self; 
    self.offlineCopy = [[NSMutableDictionary alloc]init]; 
    [self.firebase observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) { 
     if ([snapshot.value isKindOfClass:[NSDictionary class]]) { 
      NSDictionary *copy = snapshot.value; 

      weakSelf.offlineCopy = [copy mutableCopy]; 

      NSLog(@"%@", copy); 
     } 

    }]; 
} 
+0

이것은 작동하지 않습니다. OfflineCopy 속성은 블록이 실행 된 후에 데이터를 포함하지 않습니다. – dododedodonl

+0

이 블록은이 시간 동안 비동기 적으로 실행될 가능성이 큽니다. 이 값을보기 위해 NSLog (@ "% @", weakSelf.offlineCopy)를 시도 할 수 있습니다. 이 블록이 완료되면 "offlineCopy"를 얻기 위해 다시 콜백해야합니다. Completion –

+0

블록이 비동기 적으로 실행된다는 것을 알고 있습니다 ... offlineCopy 속성이 설정되지 않습니다 ... 블록이 실행되기 전과 동일하게 유지됩니다. .. – dododedodonl