ユーザーからの入力でいくつかの文字列を取得し(「exit」の入力を停止します)、それらを NSMutableArray に入れて並べ替えるプログラムを作成しました。
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
NSInteger compare( id id1, id id2, void* context)
{
NSString* str1=[id1 stringValue], *str2=[id2 stringValue]; /* ****** exception here */
const char* buf1, *buf2;
buf1=[str1 UTF8String];
buf2=[str2 UTF8String];
if(strcmp(buf1,buf2)<0)
return NSOrderedAscending;
else
return NSOrderedDescending;
}
int main (int argc, const char * argv[])
{
NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init];
NSMutableArray* array=[[NSMutableArray alloc]init];
NSString* str=@"";
char buffer[100];
NSLog(@"Type a sequence of strings, ending with 'exit', the strings will be sorted in alphabethical order");
while(! [str isEqualToString:@"exit\n"])
{
fgets(buffer,100,stdin);
str=[NSString stringWithUTF8String: buffer];
[array addObject: str];
}
[array sortUsingFunction: compare context: NULL];
[array release];
[pool drain];
return 0;
}
しかし、「**」でマークした行で例外が発生します。次のように表示されます。
2012-05-09 00:10:14.502 CLITest[1029:903] -[NSCFString stringValue]: unrecognized selector sent to instance 0x10010cbf0
id から文字列値を取得していないようです。なぜですか? 比較方法を変更するにはどうすればよいですか?