我正在尝试实现一个函数来编辑某个条目,或者如果不存在则创建新条目。 这是代码
NSManagedObject *newConnection = [[NSManagedObject alloc] init];
if(_connection != nil) {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Connection" inManagedObjectContext:context];
[request setEntity:entityDesc];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF == %@", _connection.connectionID];
[request setPredicate:pred];
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
if([objects count] > 0) {
newConnection = objects[0];
}
}
else {
newConnection = [NSEntityDescription insertNewObjectForEntityForName:@"Connection" inManagedObjectContext:context];
}
_connection是对象,如果我正在尝试编辑连接,我将从之前的视图中获取。我在executeFetchRequest
之后也得到了一个对象,但是如果我试图将对象[0]分配给newConnection,我会收到错误EXC_BAD_ACCESS
。
有一个更好的方法吗?我做错了什么?
解决方案:
NSManagedObject *newConnection;
代替NSManagedObject *newConnection = [[NSManagedObject alloc] init];
答案 0 :(得分:0)
检查您尝试访问的阵列中是否有任何对象始终是一个好习惯。
NSArray *objects = [context executeFetchRequest:request error:&error];
if([objects count]>0) {
newConnection = objects[0];
}
最有可能的情况是,您的获取请求不会返回任何对象。而且你仍然试图访问索引0处的对象。因此崩溃
答案 1 :(得分:0)
NSManagedObject应该使用Entity:
启动从根本上创建一个托管对象NSManagedObject是一个 Objective-C类与任何其他Objective-C类一样。像其他各种各样 类,NSManagedObject对实例施加了一些约束 创建。如前所述,您必须关联新的托管 具有定义其属性的实体对象的对象实例 使用定义其环境的托管对象上下文。您 因此,只能通过发送init来初始化托管对象 消息,你必须使用指定的 initializer-initWithEntity:insertIntoManagedObjectContext:-which sets 实体和上下文
newConnection在初始化时不能有任何实体。所以正确的方法是只获得一个指针。然后将其初始化。我希望,我的描述是正确的。
NSManagedObject *newConnection;
if(_connection != nil) {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Connection" inManagedObjectContext:context];
[request setEntity:entityDesc];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF == %@", _connection.connectionID];
[request setPredicate:pred];
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
if([objects count] > 0) {
newConnection = objects[0];
}
}
else {
newConnection = [NSEntityDescription insertNewObjectForEntityForName:@"Connection" inManagedObjectContext:context];
}