【问题标题】:NSString isEqualToString not workingNSString isEqualToString 不起作用
【发布时间】:2014-09-06 23:52:29
【问题描述】:

类定义如下:

@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

源代码:

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");
}

NSLog 输出如下:

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

为什么“5680295”不等于“5680295”? 我尝试了以下代码:

NSString* id1=@"5680295";
NSString* id2=@"5680295";
if([id1 isEqualToString:id2])
{
    NSLog(@"equal");
}

上面的代码显示“等于”,但我还是不知道为什么?

【问题讨论】:

  • 这些日志行中有 5 秒的间隔。这是为什么呢?
  • @trojanfoe,这可能只是 OP 在调试器中单步执行。
  • 我认为它可能是类型转换问题。你能同时匹配两者都是NSString 还是不使用isKindOfClassif([article.articleId isKindOfClass:[NSString class]])
  • 嗯...有没有可能articleIdNSNumber
  • KNArticle是什么类?它的子类是什么?

标签: ios objective-c


【解决方案1】:

正如其他人指出的那样,isEqualToString: 返回NO 的原因可能是因为article.articleId 不是字符串。

self.bookmark.articleId 必须是 NSString 的实例,因为它响应 isEqualToString:

确保articleId 是预期的类型:

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

【讨论】:

  • 非常感谢您的回答,我已经更新了问题。 article.articleId 和 self.bookmark.articleId 都被声明为 NSString,但是 [article.articleId class] 是 NSCFNumber。我会修复它。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多