2012-01-16 6 views
1

アプリケーションでコアデータを取得するのが非常に困難です。私は、テーブルビューコントローラのコアデータと、単一のビューアプリケーションの中核データであっても、非常に快適です。私は私のプログラムが複数のView Controllerで適切に機能するようにすることはできません。複数のviewControllerを使用したコアデータ

私はZarraのコアデータブックを読んで、iOS用のプロコアデータを購入し、リストされたプロジェクトを完了しましたが、それらのすべてがTableViewコントローラで使用されています。 iOS向けのプロコアデータのシェイプアプリケーションは例外です。

誰もが、複数のビューコントローラとコアデータでプログラムを実行する方法を示す例(コードやチュートリアル)を知っていますか?

私がしたいのは、次のviewControllerに繋がる(テーブルビューの代わりに)最初のボタンです。

ハウス

  • :2番目のビューコントローラでは、私は最初の実体がどこにあるので、私はこれまでのところ、このようなものを持って、最初のエンティティのセットから

    を情報で埋め、その情報を希望しますhouseName(属性)

  • 乗員(関係)

  • PERSONNAME(属性)
  • 世帯(関係)

乗員< - >>家庭(多くの1つ)

{ 
... 
int i = //house selected on previous view controller; 
NSManagedObject *people = [[self sortOccupants] objectAtIndex:i]; 
textField01.text = [NSString stringWithFormat:@"%@",[[people valueForKey:@"personName"]description]]; 
} 

ソート乗員次のようになります。

-(NSArray *)sortOccupants 
{ 
NSSortDescriptor *sortPeopleInHouse = [[NSSortDescriptor alloc] initWithKey:@"personName" ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortPeopleInHouse, nil]; 
return [[(NSSet *)[house valueForKey:@"occupants"] allObjects] sortedArrayUsingDescriptors:sortDescriptors]; 
} 

いずれのアイデアも素晴らしいと思いますが、これを示すサンプルコードには私が最も感謝しています。

おかげで、

答えて

1

私がこれにアプローチする方法は、あなたのエンティティのNSManagedObjectサブクラスを生成することです(より読みやすく、型安全です)。

次に、2番目のビューコントローラで新しいinitメソッドを作成します。initWithHouse:(家*)家か何か:

@property (nonatomic, strong) House * currentHouse; 
@property (nonatomic, strong) NSArray * sortedOccupants; // Array of People objects 

-(id) initWithHouse:(House *)house 
{ 
    if (self = [super init]) 
    { 
     // Managed Object Context available from [currentHouse managedObjectContext] 
     currentHouse = house; 
     sortedOccupants = [self sortOccupants:house.occupants]; 
    } 
    return self; 
} 

-(NSArray *)sortOccupants: (NSSet *)occupants 
{ 
    NSSortDescriptor *sortPeopleInHouse = [[NSSortDescriptor alloc] initWithKey:@"personName" ascending:YES]; 
    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortPeopleInHouse, nil]; 

    return [occupants allObjects] sortedArrayUsingDescriptors:sortDescriptors]; 
} 

希望するものがあります。

+0

ありがとうございましたこれは意味があります。私は2011wwdcストーリーボードビデオに基づいて、ストーリーボードの提案とは別の方法で使いました。しかし、これは私がそれを働かせる方法を理解するために行く必要がある方向に私を指差すのに役立ちました。ありがとう – jamesC

+0

CDモデルを変更したときにclobberedしないサブクラスを含む、CoreDataクラスの作成を支援するためのモジューネラをチェックしてください。 – occulus

1

多分キーが各ビューコントローラは、そのヘッダに

@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext; 

を有していなければならないということです。

ビューコントローラをプッシュする前に、そのビューコントローラに管理オブジェクトコンテキストを渡します。この新しいView Controllerでは、コンテキストの検索と保存のための典型的な方法を使用できます。

あなたは実際に人のリストであるホームビューコントローラから始めます。ユーザーを選択し、ユーザービューコントローラーを起動します。管理されたオブジェクトコンテキストとPersonのインスタンスをこの個人ビューコントローラに渡す必要があります。

+0

これは他の回答のように入力していただきありがとうございました。私はコアデータとストーリーボードをもっと見なければなりませんでした。 – jamesC

関連する問題