2010-11-19 13 views
1

私のアプリケーション用のJSONを解析しようとしています。 "name"の値を設定しようとすると、エラーunrecognized selector sent to instance'が出ます。
これは、エラーが発生した上でのコードの行です:CoreData、JSON "インスタンスに送信されたセレクタが認識されません"

json_object: { 
draftstatus = "isdraftfull.php"; 
getcard = "getcard.php"; 
getpack = "getpack.php"; 
imageextension = ".jpg"; 
images = "images/small/"; 
joindraft = "joindraft.php"; 
joindraftmenu = "getjoindraftmenu.php"; 
login = "loginasuser.php"; 
name = "the server"; 
passpack = "passpack.php"; 
playerdraftstatus = "getplayerdraftstatus.php"; 
signup = "signup.php"; 
userexists = "checkifuserexists.php"; 
usesetidforimagepath = false; 
} 

Server.hルックス:私のJSONはこのようになりますself.name = [json_object objectForKey:@"name"];(json_objectはNSDictionaryのであり、「自己」はCoreData内のオブジェクトである)

このように:

#import <CoreData/CoreData.h> 
#import "JSON.h" 

@interface Server : NSManagedObject 
{ 
    NSMutableData *responseData; 
} 

@property (nonatomic, retain) NSString * playerdraftstatus; 
@property (nonatomic, retain) NSString * signup; 
@property (nonatomic, retain) NSNumber * usesetidforimagepath; 
@property (nonatomic, retain) NSString * login; 
@property (nonatomic, retain) NSString * imageextension; 
@property (nonatomic, retain) NSString * userexists; 
@property (nonatomic, retain) NSString * getcard; 
@property (nonatomic, retain) NSString * passpack; 
@property (nonatomic, retain) NSString * draftstatus; 
@property (nonatomic, retain) NSString * joindraftmenu; 
@property (nonatomic, retain) NSString * getpack; 
@property (nonatomic, retain) NSString * joindraft; 
@property (nonatomic, retain) NSString * images; 
@property (nonatomic, retain) NSNumber * isdefaultserver; 
@property (nonatomic, retain) NSString * root; 
@property (nonatomic, retain) NSString * name; 

- (id) initWithWebAddress:(NSString *) address; 
- (id) initWithWebAddressAsyn:(NSString *) address; 
- (void) fillFromJSON:(NSDictionary *) json_object; 
- (void) saveServer; 

@end 

私はそれが数日前に働いていたと信じていますが、私は覚えていません。今日私が作業を開始したとき、私は "ルート"オブジェクトを追加しました。それはエラーなしでコンパイルされますが、そのjsonを解析しません。

ヘルプ?

EDIT
私はname = "the server"に戻ってきてJSONを変更し、私はこのNSLog(@"json_object name: %@", [json_object objectForKey:@"name"]);のようにログがjson_object name: the serverは言うが、私はString型であるself.nameにそれを設定しようとしたとき、私はまだ同じエラーを取得することをログインしたとき。
名前の中の値が常に引用符で囲まれていないと、[json_object objectForKey:@"name"]のログからわかるように、JSONのログバージョンを調べるときに引用符なしで表示されることがあります。それは問題なのでしょうか、それはなぜ起こっていますか?私がjsonを出力しているWebページを真っ直ぐ見ると、値の周りに常に引用符があります。

EDITは2
フルエラーは次のとおりです。

-[Server setName:]: unrecognized selector sent to instance 0x61036e0 
2010-11-19 15:46:10.113 TCGDraft[57953:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Server setName:]: unrecognized selector sent to instance 0x61036e0' 
*** Call stack at first throw: 

EDIT
3私は "自己" についてのNSLogを行なったし、これはself: <Server: 0x6143190> (entity (null); id: (null) ; data: {})
は、私が何を持って戻って来ないものですそれが正常だとすれば手がかりになる。これはCoreDataオブジェクトであり、私は何とかそれを混乱させるかもしれないと感じています。

EDIT 4
私は戻って、このようにCoreDataからサーバーオブジェクトを作成するためのコードを見て:

Server *server = [NSEntityDescription 
        insertNewObjectForEntityForName:@"Server" 
        inManagedObjectContext:context]; 

私は今ちょうどそれがそうEXC_BAD_ACCESSを言うエラーが出ることを実行したとき何とかそのオブジェクトが台無しになっているように見える...しかし、私はどのようにわからない。

EDIT 5
右ので、私は完全に私のカスタムコードでServer.hとServer.mファイルを削除し、私はCoreDataオブジェクトからそれらを再作成し、私は「編集4」に掲載し、Iそのコードを試してみましたEXC_BAD_ACCESSについても同じエラーが発生します。だから、私は明らかにForwardではなくBACKWARDになりました。

+0

[json_object objectForKey: "名前" @]。ヌル値を戻しています。それを確認してください。 – jfalexvijay

+0

"json_object"の下にある "name"が "Default Server"であると言うと、null値を戻す方法はありますか? –

+0

本当にjson_objectはNSDictionaryですか? NSLog(@ "class:%@"、[json_object class])を実行します。それが何を返すか見ることができます。 –

答えて

3

まず、NSManagedObjectをJSONパーサメソッドから完全に分離することをお勧めします。 JSONデータの非同期の読み込みと処理はすべて、管理対象オブジェクトのプロパティに割り当てることができる別のオブジェクトで処理する必要があります。

#import <CoreData/CoreData.h> 

@interface Server : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSString * playerdraftstatus; 
@property (nonatomic, retain) NSString * signup; 
... 
@property (nonatomic, retain) NSString * name; 

@end 

第二に、それ以外の場合はCoreDataを操作し、あなたがしようとしたときにEXEC_BAD_ACCESS例外を得ている理由は、最も可能性があります(あなたのため、これらのオブジェクトを保存し、保存することができません@synthesizeに戻っ@dynamic値を変更しないでくださいオブジェクト!)。

@dynamic *playerdraftstatus; 
@dynamic *signup; 
... 
@dynamic *name; 

今、あなたは最終的に

Server *server = [NSEntityDescription 
        insertNewObjectForEntityForName:@"Server" 
        inManagedObjectContext:context]; 

server.name = [json_object valueForKey:@"name"]; 

とIEサーバーオブジェクトを作成しているところコントローラから属性値を代入してみてください、あなたがこれまでにCoreDataが後になりますように、サーバーオブジェクトを解放しません作りますこれは自動的にあなたのためです。

PS:あなたは、データモデルを変更した場合、あなたがiPhone /シミュレータからアプリを削除/リセットする必要がありそうでない場合、あなたは店の種類等

電話で既存のものと互換性がないというエラーメッセージが表示されます

どのように行って、さらにエラーメッセージが表示されたら教えてください。

乾杯、

Rogメール

+0

3時間前にどこにいたのですか?それは私が最終的に考え出した問題のほとんどすべてでした。 –

0

問題は、サーバークラスにsetNameメソッドがないことです。それはjsonデータとは関係ありません。プロパティを合成したり、必要なメソッドを定義したりしてください。

+0

これは、CoreData xcdatamodelファイルでエンティティ "Server"を選択し、 "File - > New File"をクリックし、 "Managed Object Class"を選択し、プロンプトに従って作成したオブジェクトです。意味、XCodeはこのファイルを作成しました。何らかの必要なメソッドがなければ、何かが間違っています。これは私がObjective-CとXCodeについて嫌なばかげたものです。 –

+0

なぜ私たちにユーモアを与え、Server.hに何を投稿するのですか? –

+0

@CrystalSkull:最初の投稿に追加しました。 –