views:

16312

answers:

5

I want to compare the value of an NSString to the string "Wrong". Here is my code:

NSString *wrongTxt = [[NSString alloc] initWithFormat:@"Wrong"];
if( [statusString isEqualToString:wrongTxt]){
     doSomething;
}

Do I really have to create an NSString for "Wrong"?

Also, can I compare the value of a UILabel.text to a string without assigning the label value to a string?

+13  A: 
if ([statusString isEqualToString:@"Wrong"]) {
    // do something
}
Wevah
Thanks wevah. Perspx was 1 sec faster.
Bryan
+28  A: 

Do I really have to create an NSString for "Wrong"?

No, why not just do:

if([statusString isEqualToString:@"Wrong"]){
    //doSomething;
}

Using @"" simply creates a string literal, which is a valid NSString.

Also, can I compare the value of a UILabel.text to a string without assigning the label value to a string?

Yes, you can do something like:

UILabel *label = ...;
if([someString isEqualToString:label.text]) {
    // Do stuff here 
}
Perspx
That works. I guess I just have buggy code. It was throwing an exception before.
Bryan
To elaborate: label.text *IS* a string, so of course you don't need to create a string from it for the comparison.
Amagrammer
+5  A: 

Brian, also worth throwing in here - the others are of course correct that you don't need to declare a string variable. However, next time you want to declare a string you don't need to do the following:

NSString *myString = [[NSString alloc] initWithFormat:@"SomeText"];

Although the above does work, it provides a retained NSString variable which you will then need to explicitly release after you've finished using it.

Next time you want a string variable you can use the "@" symbol in a much more convenient way:

NSString *myString = @"SomeText";

This will be autoreleased when you've finished with it so you'll avoid memory leaks too...

Hope that helps!

h4xxr
I was wondering about that. I often see string variables that are objective c objects, but they are never released. Thanks!
Bryan
The hint is in the "alloc" bit. If you use an Alloc (or Copy) then you have to specifically release. If you don't, the convention is that the object will be already set to autorelease.
h4xxr
Yes, although it can contain `new` or `copy` for example `newObject` (from `NSDictionaryController`) or `mutableCopy` (from `NSObject`) http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW1
Perspx
+1  A: 

You can also use the NSString class methods which will also create an autoreleased instance and have more options like string formatting:

NSString *myString = [NSString stringWithString:@"abc"];
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42];
danielpunt
A: 

unfortunately, isEqualToString will compare each character. for instance, in a variable we have "Hello", and we are going to compare with other containing "hello", for objective-c, they aren't similar so it wouldn't be useful for us.

Néstor