現在、必要な属性を入力してエンティティを設定しようとしています。私は、XML応答を解析し、それらが出現するときに属性を割り当てることによってこれをやっています。私が実行している問題は、型の不一致が原因で、属性セット関数が「関数に送信されたセレクタが正しくありません」というエラーが発生するということです。私はデバッガに入って、常にcustEntity.name属性に割り当てる前に、自分のタイプがNSStringではなくNSCFStringであるように見えることに気付きました。私はいくつかの検索といくつかのテストを行い、自分の修正を試みましたが、どこにも行けませんでした。関連するコードとその効果を以下に示します。コアデータ:Entity.Attribute、タイプの問題を設定する
私の他のエンティティ定義を一つのファイルに生成され、合わせて自動、DataModelObject.h:
@interface Checkpoint : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * lat;
@property (nonatomic, retain) NSNumber * lon;
@property (nonatomic, retain) NSManagedObject * myRoute;
@end
DataModelObject.m
私の現在のコードは、提案の結果としてどのように見えるか@implementation Checkpoint
@dynamic name;
@dynamic lat;
@dynamic lon;
@dynamic myRoute;
@end
NSString *chkptName = [attributeDict objectForKey:@"name"];
checkpoint.name = [[NSString stringWithString:chkptName] stringValue];
T他の誰かに彼はObjective-cとiPhone開発には新しくて、私は知らないので、それは必要な場合もありますが、これはうまくいかないことがあります。 2行目の実行の前に、chkptNameの値は人間が読める正しい文字列で、割り当てたい文字列です。理論的には、2行目を正しく理解すれば、NSStringをckptNameの値で再宣言し、chkptNameの値を取得するのと同じでなければならないstringValueでその実際の値を再度読み込みます。しかし、私のアプリがsigAbrtでクラッシュし、変数の値をチェックしようとすると、NSCFString型の値が無効であることがわかります。この時点で私はこれを解決する方法を失っています。私はエンティティの属性を正しく変更していますが、以前はこの問題に遭遇していませんでした。
また、おそらくはるかに単純な私はこれを始めたことは注目に値する:
checkpoint.name = [attributeDict objectForKey:@"name"];
しかし、これは同じSIGABRT、誤った選択エラーを生じました。
編集:要求されたように完全なエラー:
2011-08-02 07:25:00.544のMyApp [16011:207] - [NSCFStringのstringValue]:未認識セレクタインスタンスに送信0x5c174e0 2011-08-02 07 :25:00.545のMyApp [16011:207] *によりキャッチされない例外 'NSInvalidArgumentException'、理由にアプリを終了は: ' - [NSCFStringのstringValue]:未認識セレクタインスタンス0x5c174e0に送ら'
EDIT2:デバッガ出力:
(gdb) po checkpoint
<Checkpoint: 0x5a30730> (entity: (null); id: (null) ; data: {})
(gdb) po [checkpoint class]
Checkpoint
(gdb) po [checkpoint entity]
Can't print the description of a NIL object.
私が逃した関連するコードがある場合は、あなたが提供できる明確化は大いにありがたいです。もし可能であれば、私はそれを提供してくれるでしょう。ありがとう!
-Karoly
また、 'po [checkpoint class]'を使用して、どのタイプのクラスであるかを確認することもできます。 –
私は先に進み、結果をプリントアウトして質問を編集しました。 [チェックポイントエンティティ]は問題ではないと思われますが、値を変更するために何も設定できないため、わかりません。私はチェックポイント変数を2行前にあらかじめ割り当てる。 –
@Karol S - これは、 'Checkpoint'インスタンスがエンティティ記述で正しくインスタンス化されていないことを示唆しています。 'Checkpoint'クラスのような新しいマネージオブジェクトをインスタンス化するには' + [NSEntityDescription entityForName:inManagedObjectContext:] 'を使用しますか? – PeyloW