0

他のエンティティと何らかの関係があるメソッドを保存したいと思います。アプローチと背景は1対1の関係ですが、メソッドにはいくつかのヒントと例が含まれている必要があります。私はすでに他の多くの質問やチュートリアルを見ましたが、なぜそれが機能しないのかわかりません。dataToBeSavedは、メソッドに割り当てたい文字列としてデータを含むディクショナリです。

これがMethod.hです。

@interface Method : NSManagedObject

@property (nonatomic, retain) NSNumber * id;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Approach *methodtoapproach;
@property (nonatomic, retain) Background *methodtobackground;
@property (nonatomic, retain) NSSet *methodtoexample;
@property (nonatomic, retain) NSSet *methodtotipps;
@end

@interface Method (CoreDataGeneratedAccessors)

- (void)addMethodtoexampleObject:(Example *)value;
- (void)removeMethodtoexampleObject:(Example *)value;
- (void)addMethodtoexample:(NSSet *)values;
- (void)removeMethodtoexample:(NSSet *)values;

- (void)addMethodtotippsObject:(Tipps *)value;
- (void)removeMethodtotippsObject:(Tipps *)value;
- (void)addMethodtotipps:(NSSet *)values;
- (void)removeMethodtotipps:(NSSet *)values;

@end

これが私のコードです。コメントされたセクションをその中に入れて、私が何をしようとしたかを確認できるようにします...

Method *newMethod = [NSEntityDescription insertNewObjectForEntityForName:@"Method" inManagedObjectContext:managedObjectContext];

//    [newMethod setValue:[dataToBeSaved objectForKey:@"name"] forKey:@"name"];
//    [newMethod setValue:[NSNumber numberWithInt:11] forKey:@"id"];
    newMethod.name = [dataToBeSaved objectForKey:@"name"];
    newMethod.id = [NSNumber numberWithInt:11];
    newMethod.methodtoapproach.summary = [dataToBeSaved objectForKey:@"summary"];
    newMethod.methodtobackground.background = [dataToBeSaved objectForKey:@"background"];



    NSMutableSet *tippsSet = [[NSMutableSet alloc] initWithObjects:[dataToBeSaved objectForKey:@"tipps"], nil];
    NSMutableSet *exampleSet = [[NSMutableSet alloc] initWithObjects:[dataToBeSaved objectForKey:@"example"], nil];

    [newMethod addMethodtotipps:tippsSet];
    [newMethod addMethodtoexample:exampleSet];
//    [[newMethod mutableSetValueForKey:@"methodtotipps"] addObject:[dataToBeSaved objectForKey:@"tipps"]];
//    [[newMethod mutableSetValueForKey:@"methodtoexample"] addObject:[dataToBeSaved objectForKey:@"example"]];
//    [newMethod addMethodtotippsObject:[dataToBeSaved objectForKey:@"tipps"]];
//    [newMethod addMethodtoexampleObject:[dataToBeSaved objectForKey:@"example"]];
//    newMethod.methodtotipps.tipps = [dataToBeSaved objectForKey:@"tipps"];
//    newMethod.methodtoexample.example = [dataToBeSaved objectForKey:@"example"];

そのようにアプリを実行すると、次のエラーが発生します。

*キャッチされなかった例外'NSInvalidArgumentException'が原因でアプリを終了しています、理由:'-[__ NSCFStringエンティティ]:認識されないセレクターがインスタンスxxxに送信されました

さらに情報が必要な場合は、コメントに投稿してください...

4

2 に答える 2

0

ええ、私もこれに巻き込まれました。

メソッドを使用したい場合...

- (void)add<blah>Object...

次に、自分で作成する必要があります。

私が実際にやっていることは、逆の関係を作ることです。

子を作成してから子を親に追加する代わりに。私は子を作成してから、その親が何であるかを子に伝えます。

于 2013-03-26T09:40:10.907 に答える
0

実際、今では次のように機能しました:#

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

managedObjectContext = [appDelegate managedObjectContext];
fetchedResultsController = [appDelegate fetchedResultsController];
Method *newMethod = [NSEntityDescription insertNewObjectForEntityForName:@"Method" inManagedObjectContext:managedObjectContext];
Approach *newApproach = [NSEntityDescription insertNewObjectForEntityForName:@"Approach" inManagedObjectContext:managedObjectContext];
Background *newBackground = [NSEntityDescription insertNewObjectForEntityForName:@"Background" inManagedObjectContext:managedObjectContext];
Tipps *newtipp = [NSEntityDescription insertNewObjectForEntityForName:@"Tipps" inManagedObjectContext:managedObjectContext];
Example *newExample = [NSEntityDescription insertNewObjectForEntityForName:@"Example" inManagedObjectContext:managedObjectContext];


[newMethod setName:[dataToBeSaved objectForKey:@"name"]];
[newMethod setId:[NSNumber numberWithInt:11]];
newApproach.summary = [dataToBeSaved objectForKey:@"summary"];
newBackground.background = [dataToBeSaved objectForKey:@"background"];
newtipp.tipps = [dataToBeSaved objectForKey:@"tipps"];
newExample.example = [dataToBeSaved objectForKey:@"example"];

NSMutableSet *tippsSet = [NSMutableSet set];
NSMutableSet *examplesSet = [NSMutableSet set];

[newMethod setMethodtoapproach:newApproach];
[newMethod setMethodtobackground:newBackground];
[newMethod setMethodtoexample:examplesSet];
[newMethod setMethodtotipps:tippsSet];

[newMethod addMethodtoexampleObject:newExample];
[newMethod addMethodtotippsObject:newtipp];

NSError *error;
if (managedObjectContext != nil)
{
    if([managedObjectContext hasChanges])
    {
        [managedObjectContext save:&error];
        if(error)
        {
            NSLog(@"Error Saving data: %@", [error userInfo]);
        }
    }
}

@Fogmeisterが意味するものかもしれませんが、私は(今まで)それがどのように機能するかについては問題ありません。後で必要な最適化があるかもしれません...もしそうならここに投稿します...

于 2013-03-27T09:47:36.123 に答える