【问题标题】:Transfer Core Data Over Segue - Objective-C (Xcode)通过 Segue 传输核心数据 - Objective-C (Xcode)
【发布时间】:2014-07-02 00:46:51
【问题描述】:

我正在尝试将一些 NSStrings 保存到 Core Data,然后从另一个视图控制器中的 UITableView 访问它们。这是我用来将字符串保存到 Core Data 的代码:

- (IBAction)GoBackButton:(id)sender {

    NSManagedObjectContext *context = [self managedObjectContext];

    // Create a new managed object
    NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Device" inManagedObjectContext:context];
    [newDevice setValue:Title forKey:@"title"];
    [newDevice setValue:Step1 forKey:@"step1"];
    [newDevice setValue:Step2 forKey:@"step2"];
    [newDevice setValue:Step3 forKey:@"step3"];
    [newDevice setValue:img forKey:@"imagename"];


    NSError *error = nil;
    // Save the object to persistent store
    if (![context save:&error]) {
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }

    [self performSegueWithIdentifier: @"goBack" sender: self];
    reloadType = @"YES";

    //[self dismissViewControllerAnimated:YES completion:nil];

}

这是我用来尝试通过 segue 将数据传回的方法:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if([segue.identifier isEqualToString:@"goBack"]){

        [[segue destinationViewController]setManagedObjectContext:self.device];
    }

}

但是,这行:

[[segue destinationViewController]setManagedObjectContext:self.device];

带来错误“选择器'setManagedObjectContext:'没有已知的实例方法。如果需要帮助找到解决此问题的方法,我可以发布更多我的核心数据模型创建代码。

【问题讨论】:

    标签: ios objective-c core-data nsmanagedobjectcontext


    【解决方案1】:

    除非您的其他视图控制器也应该能够访问核心数据方法(例如也能够读取和写入您的数据库)。我强烈建议将您的字符串添加到数组或字典中并传递它。

    无论如何,它不起作用的原因是您必须导入其他视图控制器标头,然后对其进行转换。

    类似:

    MyOtherVC *temp = [segue destinationViewController];
    [temp theMethodIWannaUse:theData];
    

    此外,您必须在其他视图控制器上实现它,例如,如果您想设置核心数据,那么您必须在标头(或至少您想要使用的方法)中公开您的核心数据对象你的目标视图控制器。

    编辑:

    要呈现的 VC 必须在标题中包含:

    @property (weak,nonatomic) NSManagedObjectContext *context;
    

    然后像这样在为 segue 做准备时传递它:

    MyOtherVC *temp = [segue destinationViewController];
    [temp theMethodIWannaUse:theData];
    temp.context = *theContext*;
    

    【讨论】:

    • 如何在目标视图控制器的标头中公开核心数据对象?我正在尝试按照您上面所说的设置核心数据。
    • 添加@property (weak, nonatomic) NSManagedObjectContext *managedObjectContext;在另一个视图控制器的标题中。
    • 我已经按照你的建议做了。它在我的问题中显示的同一行上给了我错误“'第二视图控制器'没有可见的@interface声明选择器'setManagedObjectContext:'”。想法?
    • 将该行更改为 temp.managedObjectContext = 您要在此处传递的上下文;顺便说一句,您面临的问题与 Core Data 没有任何关系。更多关于使用另一个类的方法/属性。
    • 好的。感谢到目前为止的所有帮助(我对此有些陌生)。我仍然无法解决这些错误消息。我在两个视图控制器的 .h 中都有这一行:@property (weak, nonatomic) NSManagedObjectContext *device;。它有一个错误,说在视图控制器上找不到属性“managedObjectContext”。我该如何解决这个问题?
    【解决方案2】:

    -(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    DetailComplaints *detailComplaints = [[UIStoryboard storyboardWithName:@"Main" bundle:nil]
                             instantiateViewControllerWithIdentifier:@"DetailComplaints"];
    detailComplaints.tempWebData=[self.detailWebServce objectAtIndex:indexPath.row];
    
    //detailComplaints.tempName=[self.detailWebServce valueForKey:@"username"];
    
    [self.navigationController pushViewController:detailComplaints animated:YES];
    

    }

    并像这样接收其他视图控制器...
    `

    -(NSManagedObjectContext *)managedObjectContext
    {
         NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
      //  NSManagedObjectContext *context = nil;
        id delegate = [[UIApplication sharedApplication] delegate];
        if ([delegate performSelector:@selector(managedObjectContext)]) {
            context = [delegate managedObjectContext];
        }
        return context;
    }
    

    ` 然后..

    _txt_name.text= [self.tempWebData valueForKey:@"username"];
        _txt_address.text=[self.tempWebData valueForKey:@"address"];
        _txt_phone.text=[self.tempWebData valueForKey:@"phonenumber"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多