2014-07-16 44 views
6

Klasse definieren, wie folgend:NSString isEqualToString Arbeits nicht

@interface KNBookmark : NSObject 
@property (nonatomic, strong) NSString *bookmarkId ; 
@property (nonatomic, strong) NSString *novelName ; 
@property (nonatomic, strong) NSString *novelId ; 
@property (nonatomic, strong) NSString *novelPic ; 
@property (nonatomic, strong) NSString *articleId ; 
@property (nonatomic, strong) NSString *articleTitle ; 
@property (nonatomic, strong) NSNumber *readRate ; 
@end 

@interface KNArticle : NSObject 

@property (nonatomic, strong) NSString *num ; 
@property (nonatomic, strong) NSString *articleId ; 
@property (nonatomic, strong) NSString *title ; 
@property (nonatomic, strong) NSString *subject ; 
@property (nonatomic, strong) NSString *text ; 
@end 

Der Quellcode:

for(int i=0;i<count;i++) 
{ 
    KNArticle* article=[self.novel.articles objectAtIndex:i]; 

    NSLog(@"bookmark articleId='%@' articleId='%@'",self.bookmark.articleId,article.articleId); 

    NSLog(@"bookmark articleId class='%@' articleId class='%@'",[self.bookmark.articleId class],[article.articleId class]); 

    if([self.bookmark.articleId isEqualToString:article.articleId]) 
    { 
     NSLog(@"equal"); 
     self.indexArticles=i; 
     break; 
    } 
    else 
     NSLog(@"not equal"); 
} 

Die NSLog Ausgang wie folgt:

2014-07-16 22:56:14.768 novel[12685:90b] bookmark articleId='5680285' articleId='5680285' 
2014-07-16 22:56:14.768 novel[12685:90b] bookmark articleId class='__NSCFString' articleId class='__NSCFNumber' 
2014-07-16 22:56:14.769 novel[12685:90b] not equal 

warum 5.680.295 'ungleich '5680295 "? Ich habe den folgenden Code versuchen:

Der obige Code zeigt die "gleich", aber ich weiß immer noch nicht warum?

+3

Es ist eine 5-Sekunden-Lücke in diesen Protokollzeilen. Warum das? – trojanfoe

+2

@trojanfoe, es ist wahrscheinlich nur das OP durch die Zeilen im Debugger. – Anna

+1

ich denke, seine typecast Problem vielleicht. können Sie beide, die beide sind 'NSString' oder nicht mit' isKindOfClass' wie 'if ([article.articleId isKindOfClass: [NSString Klasse]])' –

Antwort

5

Wie andere darauf hingewiesen, der Grund, warum isEqualToString:NO zurückgibt, ist wahrscheinlich, weil keine Zeichenfolge ist.

self.bookmark.articleId muss eine Instanz von NSString sein, weil es isEqualToString:

sicher reagiert Make articleId des erwarteten Typ ist:

NSAssert([article.articleId isKindOfClass:[NSString class]], @"bad type in articleId"); 
+0

Vielen Dank für Ihre Antwort, ich habe das Problem aktualisiert. Sowohl article.articleId als auch self.bookmark.articleId sind als NSString deklariert, aber die [article.articleId class] ist die NSCFNumber. Ich würde es reparieren. Vielen Dank! –

Verwandte Themen