gpt4 book ai didi

iphone - 我是否正确地向核心数据添加了一个对象?

转载 作者:太空狗 更新时间:2023-10-30 03:51:31 24 4
gpt4 key购买 nike

我有一个名为“routineExercises”的实体“Routine”与“Exercise”有很多关系。

我有一个名为 addExercise 的方法,它应该向 Routine 的实例添加一个 Exercise。

这是在代码中实现它的正确方法吗?

Exercise *exercise = (Exercise *)[NSEntityDescription insertNewObjectForEntityForName:@"Exercise" inManagedObjectContext:managedObjectContext];

exercise.name = selectedExercise;

NSMutableSet *exercises = [[NSMutableSet alloc]init];

[exercises addObject:exercise];

Routine *routine = [NSEntityDescription insertNewObjectForEntityForName:@"Routine" inManagedObjectContext:managedObjectContext];

routine.routineExercises = exercises;

更新:我在 routine.routineExercises = exercises 处收到一个错误,上面写着“-[Routine setRoutineExercises:]: unrecognized selector sent to instance 0x711bf302011-04-27 01:25:37.683 Curl[888:207] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Routine setRoutineExercises:]:无法识别的选择器发送到实例 0x711bf30”"

更新:

-(void)addExercise
{
if (managedObjectContext == nil)
{
managedObjectContext = [(CurlAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
[managedObjectContext retain];
}

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Exercise" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSError *error = nil;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
}

Exercise *exercise = (Exercise *)[NSEntityDescription insertNewObjectForEntityForName:@"Exercise" inManagedObjectContext:managedObjectContext];

exercise.name = selectedExercise;

NSMutableSet *exercises = [NSSet setWithObjects:exercise,nil];

Routine *routine = (Routine *)[NSEntityDescription insertNewObjectForEntityForName:@"Routine" inManagedObjectContext:managedObjectContext];

routine.routineExercises = exercises;

if (![managedObjectContext save:&error])
{
// Handle the error.
}
NSLog(@"%@", error);

[self.routineTableView reloadData];
[mutableFetchResults release];
[request release];
}

enter image description here

错误:

2011-04-27 03:05:58.902 Curl[1954:207] -[Routine setRoutineExercises:]: unrecognized selector sent to instance 0x5d4a4e0
2011-04-27 03:05:58.904 Curl[1954:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Routine setRoutineExercises:]: unrecognized selector sent to instance 0x5d4a4e0'

例程.h

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

@class Exercise;

@interface Routine : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSDate * timeStamp;
@property (nonatomic, retain) NSSet* routineExercises;

@end

例程.m

#import "Routine.h"
#import "Exercise.h"


@implementation Routine
@dynamic name;
@dynamic timeStamp;
@dynamic routineExercises;

- (void)addRoutineExercisesObject:(Exercise *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"routineExercises" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"routineExercises"] addObject:value];
[self didChangeValueForKey:@"routineExercises" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[changedObjects release];
}

- (void)removeRoutineExercisesObject:(Exercise *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"routineExercises" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"routineExercises"] removeObject:value];
[self didChangeValueForKey:@"routineExercises" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[changedObjects release];
}

- (void)addRoutineExercises:(NSSet *)value {
[self willChangeValueForKey:@"routineExercises" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
[[self primitiveValueForKey:@"routineExercises"] unionSet:value];
[self didChangeValueForKey:@"routineExercises" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
}

- (void)removeRoutineExercises:(NSSet *)value {
[self willChangeValueForKey:@"routineExercises" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
[[self primitiveValueForKey:@"routineExercises"] minusSet:value];
[self didChangeValueForKey:@"routineExercises" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
}

@end

最佳答案

您缺少对 Routine * 的转换。

改变

Routine *routine = [NSEntityDescription insertNewObjectForEntityForName:@"Routine" inManagedObjectContext:managedObjectContext];

Routine *routine = (Routine *)[NSEntityDescription insertNewObjectForEntityForName:@"Routine" inManagedObjectContext:managedObjectContext];

关于iphone - 我是否正确地向核心数据添加了一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5799666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com