2011-07-06 16 views
1

コアデータのエンティティの1つにNSNumber属性を追加することにしました。私はコードをクリーンアップし、シミュレータからアプリを削除しました。次に、私のappDelegateに次のコードを追加し、NSNumber属性が存在しないことを伝えます。コアデータの属性が作成されていません

People *PeopleA = [NSEntityDescription insertNewObjectForEntityForName:@"People" inManagedObjectContext:context]; 
PeopleA.name = @"Paul"; 
PeopleA.number = [NSNumber numberWithInt:12]; 

name属性は、以前に作成されたものであり、常に機能します。

-[People setNumber:]: unrecognized selector sent to instance 0x4d5eeb0 

は、だから私は po 0x4d5eeb0を行なったし、name属性が、番号のないものがあることを見た:それは PeopleA.numberになったときにそれがクラッシュします。私のコアデータクラスはXCodeが私のために作ったので良いはずです。

何が問題になる可能性がありますか?

はここ

#import "People.h" 
#import "Group.h" 

@implementation People 
@dynamic name; 
@dynamic image; 
@dynamic number; 
@dynamic group; 

@end 

経口0x4d5eeb0が私を取得し、私のPeople.h

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 

@class Group; 

@interface People : NSManagedObject { 
@private 
} 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) id image; 
@property (nonatomic, retain) NSNumber * number; 
@property (nonatomic, retain) Group * group; 

@end 

People.mです:

<People: 0x5932290> (entity: People; id: 0x59322f0 <x-coredata:///People/t83A9C7D9-4F7A-4189-9EC5-7695968A29552> ; data: { 
    group = nil; 
    name = Paul; 
+0

'People.h'の内容を投稿してください。 – akashivskyy

+0

'People.h 'を含むように投稿を編集しました – tazboy

+0

' People.m'ファイルの 'number'プロパティを合成しましたか?あなたは '@dynamic number;'を持っていますか? – akashivskyy

答えて

0

不明な場合は削除してください。

2つのxcdatamodelファイルとxcdatamodeldファイルが削除されました。また、それぞれのフォルダでそれらを削除しました。それから私は新しいものを作りました。最初はいくつかの問題がありましたが、実際には今働いています。

Group.hファイルにaddPeopleメソッドがないと思ってxcodeに少し問題があります。だから、それはその方法や他の方法には反応しないかもしれないと言います。また、私はビルド時にLexical or Preprocessor Issue: 'Group.h' file not foundエラーを投げますが、すべてがまだ動作しているようです。

私はまだ何が起こっていたのか分かりません。みんなのおかげで彼らの提案に感謝します。

1

numbertheNumberような別の何かを、属性の命名試してみてください。 reserved words in Core Data attributesが知られていますが、文書化されていない未知数(意図しない言葉はありません)があります。あなたは別のものに遭遇した可能性があります。

+0

これは変更されましたが、うまく機能しませんでした。しかし、ありがとう。 – tazboy

+0

( 'バージョンの追加'メニューから)複数のバージョンのデータモデルがありますか?そうであれば、「現在のバージョン」として間違ったものが選択されている可能性があります – RyanR

+0

最初はあなたが正しいと思っていましたが、変更したバージョンにはチェックマークが付いています。さらに、古いバージョンには私のグループの「注文」属性がなく、チェックマークが付いているので、注文を設定して印刷することができます。ダーン、私はそれが望んでいた。 – tazboy

2

オブジェクトをデバッガで印刷すると、コンテキストで保持されているNSManagedObjectサブクラスかプレーンバニラカスタムクラスのいずれであるかにかかわらず、クラスに定義されているすべてのプロパティが表示されます。デバッガのプリントアウトにはnumberプロパティがなく、imageプロパティもありません。

実際には、クラスファイルの新しいバージョンをターゲットに追加していないが、新しいプロパティがない旧バージョンを実際に使用していた場合のみ可能でした。

古いファイルのターゲットを確認し、新しいバージョンがビルドターゲットに正しく追加されていることを確認します。

+0

+1優れた点re:ファイルのターゲットをチェックする。 XCodeの最も強力でユーザーフレンドリーな機能の1つ。 – RyanR

+0

これはあなたが話しているのかどうか分かりませんが、Pick - > Build Phasesタブ - > Compile Sourcesドロップダウンと呼ばれるターゲットに行きました.Pix.xcdatamodeldがそこにあり、Pick.xcdatamodelがあった私の新しいバージョンPick 2.xcdatamodelはありません。これが問題かもしれません。もしそうなら、私はこれをどのように修正するのですか? – tazboy

+0

" - "ボタンで古いバージョンを削除し、 "+"で新しいバージョンを追加するだけです。ここで、ソースにコンパイルされたファイルをカスタマイズすることができます。通常、これはXcodeによって自動的に設定され、維持されますが、多くのものを交換すると混乱することがあります。ところで、 'Pick 2.xcdatamodel'にはスペースがありますか?もしそうなら、もしそうなら、それをアンダースコアに変更したいかもしれません。 – TechZen

関連する問題