2013-06-17 3 views
-1

코드를 실행할 때이 오류가 계속 발생하면서 단추에 속성있는 텍스트를 할당하려고합니다. 저는 스탠포드 코스 cs193p에서 과제 # 2를하고 있습니다. 코드가 문제의 라인을 지나친 다음 오류가 발생하여 오류가 발생합니다. [__ NSCFString setStroke] : 인스턴스로 전송 된 인식 할 수없는 선택기입니다. 문제의 코드 줄은 forAttributedTitle forState 때입니다. 여기- [__ NSCFString setStroke] : 인스턴스로 보낸 인식 할 수없는 선택자

NSStrokeColorAttributeName : arraycontaininginfo[3]

NSStrokeColorAttributeName : colorPicked

를 교체하고 무슨 일이 일어 나는지 내가

for(UIButton * setButton in self.setButtons){ 

    Card *card = [self.game cardAtIndex:[self.setButtons indexOfObject:setButton]]; 
    NSDictionary* fullType = @{ @"triangle" : @"▲", @"circle" : @"●", @"square" : @"■"}; 
    NSDictionary* hollowType = @{ @"triangle" : @"△", @"circle" : @"○", @"square" : @"☐"}; 

    NSLog(@"%@", card.contents); 
    NSArray * arraycontaininginfo = [card.contents componentsSeparatedByString:@","]; 
    NSLog(@"%@", arraycontaininginfo); 
    NSLog(@"%@", arraycontaininginfo[2]); 
    NSLog(@"%@", arraycontaininginfo[3]); 

    if([arraycontaininginfo[2] isEqualToString:@"0.0"]){ // This helps me choose object in UIButton 
     NSString * displayType = [hollowType objectForKey:arraycontaininginfo[1]]; 

     if ([[arraycontaininginfo objectAtIndex:0] isEqualToString:@"1"]) { 
      self.displayView = [[NSString alloc] initWithString:displayType]; 
     } else if ([[arraycontaininginfo objectAtIndex:0] isEqualToString:@"2"]){ 
      NSMutableString *temp = [[NSMutableString alloc] initWithString:displayType]; 
      [temp appendString:displayType]; 
      self.displayView = [temp copy]; 
     } else if ([[arraycontaininginfo objectAtIndex:0] isEqualToString:@"3"]){ 
      NSMutableString *temp = [[NSMutableString alloc] initWithString:displayType]; 
      [temp appendString:displayType]; 
      [temp appendString:displayType]; 
      self.displayView = [temp copy]; 
     } 
    } else{ 
     NSString * displayType = [fullType objectForKey:arraycontaininginfo[1]]; 

     if ([[arraycontaininginfo objectAtIndex:0] isEqualToString:@"1"]) { 
      self.displayView = [[NSString alloc] initWithString:displayType]; 
     } else if ([[arraycontaininginfo objectAtIndex:0] isEqualToString:@"2"]){ 
      NSMutableString *temp = [[NSMutableString alloc] initWithString:displayType]; 
      [temp appendString:displayType]; 
      self.displayView = [temp copy]; 
     } else if ([[arraycontaininginfo objectAtIndex:0] isEqualToString:@"3"]){ 
      NSMutableString *temp = [[NSMutableString alloc] initWithString:displayType]; 
      [temp appendString:displayType]; 
      [temp appendString:displayType]; 
      self.displayView = [temp copy]; 
     } 
    } 
    NSLog(@"%@", self.displayView); 
    NSLog(@"%@", arraycontaininginfo[2]); 

    CGFloat alphaValue = [[arraycontaininginfo objectAtIndex:2] floatValue]; // gets color from dictionary by searching key using NSString method and returns UIColor 
    UIColor *colorPicked = [self.colorTable objectForKey:arraycontaininginfo[3]]; 
    NSLog(@"%@", [colorPicked class]); 
    NSLog(@"%@", arraycontaininginfo[3]); 
    NSLog(@"%@", colorPicked); 


// CODE CRASHES HERE!!! 
    NSDictionary * attributeDictionary = @{NSForegroundColorAttributeName: [colorPicked colorWithAlphaComponent:alphaValue], NSStrokeColorAttributeName : arraycontaininginfo[3], NSStrokeWidthAttributeName: @-4}; 

    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self.displayView attributes:attributeDictionary]; 


    [setButton setAttributedTitle:attributedString forState:UIControlStateSelected]; 
    [setButton setAttributedTitle:attributedString forState:UIControlStateNormal]; 

} 

답변

1

사용하고있는 코드입니다.

출처 :

NSStrokeColorAttributeName 전경색

OS X 10.3에서 사용 가능

나중에 같은

NSColor

기본 전무. NSAttributedString.h에 선언되어 있습니다.

From documentation

+1

은 와우, 일! 정말 고맙습니다! 그런데 어떻게 그 일이 끝났습니까? – user2076774

+1

@ user2076774 : 해당 키의 값이 색상으로되어 있기 때문입니다. 'arraycontaininginfo [3]'는 문자열이고'colorPicked'는 색상입니다. – Chuck