2016-06-11 4 views
0

Hallo Ich habe Probleme, eine benutzerdefinierte Methode zum Hinzufügen von Attributen für NSMutableAttributeString durch die Übergabe von Zeichenfolgen, int und Farbe als Parameter zu schreiben, ich bekomme drei Fehler unten, bitte helfe ..schreibe eine Add-Attribut-Methode in Objective C

-(NSMutableAttributedString*)setAttributedSuits: (NSString*) suitString 
            setwidth:(id)strokeWidth 
            setColor:(id)strokeColor{ 

NSMutableAttributedString* attributeSuits = [[NSMutableAttributedString alloc]initWithString:suitString]; 
if ([strokeWidth isKindOfClass:[NSString class]]&&[strokeWidth isKindOfClass:[UIColor class]]) // error 1 - use of undeclared identifier "UIColor", did you mean '_color'? 

{ 
    [attributeSuits addAttributes:@{NSStrokeWidthAttributeName:strokeWidth, // error 2 - use of undeclared identifier "NSStrokeWidthAttributeName" 
           NSStrokeColorAttributeName:strokeColor} //// error 3 - use of undeclared identifier "NSStrokeColorAttributeName" 
         range:NSMakeRange(0, suitString.length)]; 

} 

return attributeSuits; 
} 

Antwort

1

Alle drei Symbole, die den Fehler anzeigen, stammen von UIKit. Das bedeutet, dass Sie UIKit nicht am Anfang der .m-Datei importieren.

hinzufügen entweder

#import <UIKit/UIKit.h> 

oder

@import UIKit; 

an die Spitze der .m-Datei.

Es macht auch keinen Sinn, dass Sie id für die strokeWidth und strokeColor verwenden. Und es macht noch weniger Sinn zu sehen, ob strokeWidth ein NSString ist. Zumal der Schlüssel NSStrokeWidthAttributeName einen NSNumber erwartet. Ich schlage vor, dass Sie Ihren Code wie folgt ändern:

- (NSMutableAttributedString *)setAttributedSuits:(NSString *)suitString width:(CGFloat)strokeWidth color:(UIColor *)strokeColor { 
    NSDictionary *attributes = @{ 
     NSStrokeWidthAttributeName : @(strokeWidth), 
     NSStrokeColorAttributeName : strokeColor 
    }; 

    NSMutableAttributedString *attributeSuits = [[NSMutableAttributedString alloc] initWithString:suitString attributes:attributes]; 

    return attributeSuits; 
} 

Natürlich müssen Sie die Deklaration in der .h-Datei aktualisieren, um zu entsprechen.

+0

danke rmaddy für Ihren Rat, es funktioniert jetzt gut. Ich bin sehr neu im Programmieren, irgendwelche Vorschläge zur Verbesserung meiner Codes oben? sehr schätzen –

+0

Siehe meine aktualisierte Antwort. – rmaddy

+0

vielen dank für alle ihre kommentare !! –