尝试使用NSString,但我在比较两个字符串时遇到问题

时间:2012-03-20 03:51:52

标签: objective-c cocoa nsstring

我有一个简单的程序,我正在测试打印机类。

-(void) setInkType {
    NSMutableString *theInkType;
    InkType typeOfInk;
    char inkFromInput[50];

    NSLog(@"What type of ink are you using?");
    NSLog(@"Options are photoInk, lazerJet, regularInk");
    fgets(inkFromInput,50,stdin);
    theInkType = [[NSMutableString alloc] initWithUTF8String:inkFromInput];
    NSLog(@"%@",theInkType);

    if([theInkType compare: @"photoInk"]==true) {
        typeOfInk.photoInk = 564;
        NSLog(@"Your using a photo ink of type %d",typeOfInk.photoInk);
        inkType.photoInk = typeOfInk.photoInk;
    }
    else { if ([theInkType compare: @"lazerJet"] == true) {
        typeOfInk.lazerJet = 94;
        NSLog(@"Your using a lazer toner of type %d",typeOfInk.lazerJet);
        inkType.lazerJet = typeOfInk.lazerJet;
    }

    else { if  ([theInkType compare: @"regularInk"] == true) {
        typeOfInk.regularInk = 910;
        NSLog(@"Your using a regular ink of type %d",typeOfInk.regularInk);
        inkType.regularInk = typeOfInk.regularInk;
            }
        }       
    }
}

当我运行它时,我可以输入“photoInk”和“lazerInk”,我得到一个正确的输出。为什么当我输入“regularInk”时输出结果不好?

我认为这可能是我的{},但我不太确定。我一直在摸不着头几个小时。

如果再有Cocoa调味料,我可以做到这样看起来更顺畅让我知道了。

2 个答案:

答案 0 :(得分:3)

-compare:不返回布尔值true / false值,它返回NSComparisonResultNSOrderedAscendingNSOrderedSameNSOrderedDescending

所以你可以这样做:

if ([theInkType compare: @"photoInk"] == NSOrderedSame)

但实际上,-isEqual:方法更接近你的真实意图。

if ([theInkType isEqual: @"photoInk"])

另外:你的else条款错了。不是这个:

if (x) {
    ...
}
else { if (y) {
    ...
} }

但是这个:

if (x) {
    ...
} else if (y) {
    ...
}

答案 1 :(得分:0)

我认为这对你有用。这是我从链接中得到的答案:

Comparing text in UITextView?

SOLUTION-1:我稍后对其进行了修改,以使您的案例更加轻松:

让我们假设String1是一个NSString。

 //Though this is a case sensitive comparison of string
 BOOL boolVal = [String1 isEqualToString:@"My Default Text"];

 //Here is how you can do case insensitive comparison of string:
 NSComparisonResult boolVal = [String1 compare:@"My Default Text" options:NSCaseInsensitiveSearch]; 

 if(boolVal == NSOrderedSame)
 {
     NSLog(@"Strings are same");
 }
 else
 {
     NSLog(@"Strings are Different");
 }
  

如果boolVal是NSOrderedSame,那么你可以说字符串是相同的,否则它们是不同的。

解决方案-2:您也不会觉得这很简单,您可以在同一链接下参考 Macmade的回答

希望这会对你有所帮助。

希望这会对你有所帮助。