2014-03-06 2 views
0

저는 블록 구문을 사용하고 아래의 문제에 직면했습니다. 아래 코드는 문제를 일으키는 클래스의 다른 정적 메서드를 호출합니다. 코드 아래에있는 막대의 다음 버튼 클릭에서 호출됩니다. 이 코드의 구문에 실수가 있습니까? 블록을 사용할 때 선택기에 대한 알려진 클래스 메서드가 없습니다.

-(BOOL) shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
    { 
     if (![sender isKindOfClass:[UIBarButtonItem class] ]) { 
      return true; 
     } 
     // Trim the spaces 
     self.stewardsNameTextField.text = [self.stewardsNameTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]; 

    self.trackNameTextField.text = [self.trackNameTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]; 

    self.curatorNameTextField.text = [self.curatorNameTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]; 


    bool isValid =[JLTValidator validateFields: @[self.stewardsNameTextField, self.trackNameTextField, self.curatorNameTextField, self.weatherConditionSegment, self.trackConditionSegment] withScrollToCallback: ^(UIView * invalidField) // problem is here. Is this incorrect syntax? 
      { 
       if (invalidField == self.stewardsNameTextField || invalidField == self.trackNameTextField || invalidField == self.curatorNameTextField) 
       { 
        [invalidField becomeFirstResponder]; 
       } 
       else 
       { 
        UIEdgeInsets contentInsets = UIEdgeInsetsZero; 
        CGPoint top = CGPointMake(0, invalidField.frame.origin.y - 90); 

        [_scrollView setContentOffset:top animated:YES]; 
        _scrollView.scrollIndicatorInsets=contentInsets; 
       } 

       if (!isValid) { 
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry!" message:@"Please fill out the marked fields." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
        [alert show]; 
       } 

       return isValid; 
      }]; 

} 

정적 메소드의 정의

는 클래스에 호출되는 : 여기

+(BOOL)validateFields:(NSArray *)fields 
    { 
     return [JLTValidator validateFields:fields withScrollToCallback:nil]; 
    } 
    +(BOOL)validateFields:(NSArray *)fields andShouldDisplayMessage : (bool) shouldDisplayMessage 
    { 
     return [JLTValidator validateFields:fields withScrollToCallback:nil andShouldDisplayMessage:shouldDisplayMessage]; 
    } 

+(BOOL)validateFields:(NSArray *)fields withScrollToCallback : (void (^) (UIView *))scrollToCallback 
{ 
    return [JLTValidator validateFields:fields withScrollToCallback:scrollToCallback andShouldDisplayMessage:true]; 
} 

+(BOOL)validateFields:(NSArray *)fields withScrollToCallback : (void (^) (UIView *))scrollToCallback andShouldDisplayMessage : (bool) shouldDisplayMessage 
{ 

} 

가 무슨 잘못? pls 가이드.

+0

당신이 콜백으로 달성하려고하는거야? BOOL을 반환해야합니까? – Wain

+0

wain .. 네, 맞습니다. 그것은 bool을 반환합니다. – LUI

답변

0
+(BOOL)validateFields:(NSArray *)fields withScrollToCallback : (void (^) (UIView *))scrollToCallback 

이 메서드의 block 매개 변수는 아무 것도 반환하지 않습니다 (거기에 'void'가 있음). 따라서 블록 내부에 있으면 BOOL 값을 반환합니다 (isValid). 또한, 당신이 얻으려는 (isValid = ..... isValid) 값을 반환했는데 실수이기도합니다.

내가 u're이 블록 내에서 시도 모르겠어요,하지만이 문제를 해결하려면 다음과 같이 수행 할 수 있습니다

bool isValid =[JLTValidator validateFields: @[self.stewardsNameTextField, self.trackNameTextField, self.curatorNameTextField, self.weatherConditionSegment, self.trackConditionSegment] withScrollToCallback: ^(UIView * invalidField) // problem is here. Is this incorrect syntax? 
     { 
      if (invalidField == self.stewardsNameTextField || invalidField == self.trackNameTextField || invalidField == self.curatorNameTextField) 
      { 
       [invalidField becomeFirstResponder]; 
      } 
      else 
      { 
       UIEdgeInsets contentInsets = UIEdgeInsetsZero; 
       CGPoint top = CGPointMake(0, invalidField.frame.origin.y - 90); 

       [_scrollView setContentOffset:top animated:YES]; 
       _scrollView.scrollIndicatorInsets=contentInsets; 
      } 
     }]; 

if (!isValid) { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry!" message:@"Please fill out the marked fields." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
} 
관련 문제