2016-05-31 3 views
0

私はCoreDataとMRを学びたいと言っています。私はRay WenderlichのBeerTrackerチュートリアルを使用しており、空のデータベースにレコードを追加する際に問題があります。NSSetでレコードを追加するMagicalRecords

// beer.h  
@class BeerDetails; 



@interface Beer : NSManagedObject 

@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) BeerDetails *beerDetails; 

@end 

//beerdetails.h: 


@interface BeerDetails : NSManagedObject 

@property (nonatomic, retain) NSString * image; 
@property (nonatomic, retain) NSString * note; 
@property (nonatomic, retain) NSNumber * rating; 
@property (nonatomic, retain) NSManagedObject *beer; 



// where data is being added to the tables: 
Beer *paleLager = [Beer createEntity]; 
paleLager.name = @"Pale Lager"; 
paleLager.beerDetails = [BeerDetails createEntity]; 
paleLager.beerDetails.rating = @3; 

私のテーブルは、NSSetを使用するので、多くの1つを有する:

@property(非アトミックNULL可能に、保持)NSSet *細胞。

それは、主テーブルの上に動作しているようだが、その後、私はちょうど例のような関係を設定します(セクションは1つのセルは、多くのです)

 Section *tempSection = [Section MR_createEntity]; 
     tempSection.button = subButton; 
     tempSection.cells = [Cell MR_createEntity]; << Warning Here 

NSSet * _Nullable」に代入互換性のないポインタ型'from' Cell * _Nullable '

私は1対1の関係に変更すると動作するようです。私を混乱させる部分はNSSet *細胞です。

NSSetを使用して手動でレコードをファイルにロードする例は見つかりません。

通常、BeerTrackerのようにレコードを追加するときだけ、NSSetで特別な処理をする必要はありません。私はCoreDataはNSSetオブジェクトへのポインタを探していると思いますが、私は、この行でそれを設定する方法がわからない:正しい方向に私を入れて助け@sschaleへ

tempSection.cells = [Cell MR_createEntity]; 

おかげで、。他の誰かが恩恵を受ける可能性があるちょうどそのよう 、ここでの残りの部分です:

私はレコード値で辞書を作成し、coredata方法変更:これが最善の方法である場合、私は知らない

// added "with:(NSDictionary *) inputData; 
- (void)addCells:(NSSet<Cell *> *)values with:(NSDictionary *) inputData; 

// this call create the entity and passes the dictionary of keys/values 
[tempSection addCells:(NSSet *)[Cell MR_createEntity] with:myDictionary]; 

// here's an example of changing the values inside the 'addCells:with:' method 
    [values setValue:[inputData objectForKey:@"overpic"] forKey:@"overpic"]; 
    [values setValue:[inputData objectForKey:@"pictitle"] forKey:@"pictitle"]; 
    [values setValue:[inputData objectForKey:@"position"] forKey:@"position"]; 

を、今のところそれは働いているようだ。この記事に出くわしました誰かが興味を持つであろうことをパフォーマンスについて: http://www.cocoawithlove.com/2009/11/performance-tests-replacing-core-data.html

答えて

1

ここでは、単一のオブジェクトでのObjective Cでセットを作成するための構文は次のとおりです。

tempSection.cells = [NSSet setWithObject:[Cell MR_createEntity]];

複数の項目でそれを行うには使用:

tempSection.cells = [NSSet setWithObjects:[Cell MR_createEntity], [Cell MR_createEntity], ..., nil];

より一般的に、あなたはであなたのために作成されたアクセサを使用したいですファイル:

- (void)addCellsObject:(Cell *)value; 
- (void)removeCellsObject:(Cell *)value; 
- (void)addCells:(NSSet<Cell *> *)values; 
- (void)removeCells:(NSSet<Cell *> *)values; 

したがって、この場合には、あなたが呼びたい: `setWithObjects::`複数の項目で

[tempSection addCellsObject:[Cell MR_createEntity]];

+0

を。 – Willeke

+0

@Willekeが修正されました。ありがとう。 – sschale

関連する問題