読者です 読者をやめる 読者になる 読者になる

pixyzehn blog

iPhone App, Mac App, Programming, Web service, Tool, Evernote, etc

NSStringで「unrecognized selector sent to instance」とされたときの対処

http://www.flickr.com/photos/11540081@N05/3016498475
photo by Nick J Webb


[NSCFNumber isEqualToString:]: unrecognized selector sent to instanceのエラーに少しはまったのでそのことです。


NSDictionary型の値をkeyを参照して取得し(ここでは101のようなもの)それらを文字列として扱って前方一致のみ抽出するということをしたかったのですが、

NSString *gid = tempArray[i][@"id"];
NSString *name = tempArray[i][@"name"];


としてこれらを2つをisEqualToStringやhasPrefixを用いて比較するとエラーが出ました。


エラーの内容は、[NSCFNumber isEqualToString:]: unrecognized selector sent to instanceとなっており、NSStringとなっていないようだったので

NSString *gid = (NSString *)tempArray[i][@"id"];
NSString *name = (NSString *)tempArray[i][@"name"];


上記のようにキャストしたらエラー直るかと思いましたが、[NSCFNumber isEqualToString:]: unrecognized selector sent to instanceのエラーは解消しませんでした。


ちょっとなぞだったので、stackoverflowにおいて調べると以下に関連質問がありました。


http://stackoverflow.com/questions/6876407/nscfnumber-isequaltostring-unrecognized-selector-sent-to-instance


先ほどのもの(tempArray[i][@"id"])はNSStringオブジェクトとして認識されずエラーが出ていたようです。

NSString *string = [NSString stringWithFormat:@"%@", [[BillTableArray objectAtIndex:indexPath.row]objectForKey:@"Amount"]];

[label3 setText:string];


にならって

NSString *gid = [NSString stringWithFormat:@"%@",tempArray[i][@"id"]];
NSString *cid = [NSString stringWithFormat:@"%@",_categoryInfo[@"name"]];


とNSStringオブジェクトとして認識されてエラーが出なくなりました。


基本的なことかもしれませんが、こういうことに今後時間をかけないようにしたいと思いました。。