2016-08-27 9 views
1

私は現在CoreDataに由来するオブジェクトのNSArrayを持っています - identifierという名前のプロパティの1つはNSNumberです。コード内でいくつかの比較を行い、NSNumberNSStringに変換する必要があります。NSNumber * to CoreData

私はしかし、私は、コードのこれら2つの違いは何であるか疑問に思って、仕事にこれを持っている:この第二のスニペットはしませんいくつかの理由について

NSNumber * arrayValueNum = [coreArray[i] identifier]; 
NSString * arrayValue = [arrayValueNum stringValue]; 

NSString * test = [[coreArray[i] identifier] stringValue]; 

コンパイルし、最初のものが作成されます。

エラー:

no visible @interface for 'NSString' declares the selector 'stringValue'

は、彼らがNSNumber *値ではなく、それ自身の変数であることの中括弧であることを除いて、同じではありませんか?

+0

簡単な質問:2番目のスニペットでどのような方法で 'identifier'を実行するのですか(alt +クリックした場合)?私は、[[((MyCoreDataClass *)coreArray [i] identifier] stringValue] 'が働くかもしれない、あるいは[(NSNumber *)[coreArray [i] identifier] stringValue]ということは、 'coreArray [i]'は 'id'オブジェクトを返し、エラーを説明する' NSString'を返す 'identifier'というプロパティ/メソッドを持つオブジェクトがいくつか存在することです。 – Larme

答えて

0

を使用すると、このような変数NSStringに直接値を割り当てることができます。

NSString *test = [NSString stringWithFormat:@"%@",[coreArray[i] identifier]]; 
+0

これは '[test isEqualToString]' - '[__NSCFNumber isEqualToString:]:インスタンスに送られたセレクタが認識できない 'というエラーを引き起こします。 – Swemoph

+0

ありがとうございました! – Swemoph

関連する問題