在视图控制器之间传递核心数据项

时间:2013-11-07 13:55:13

标签: ios cocoa-touch

我正在创建一个需要核心数据存储一些信息的应用程序,我已设法让应用程序创建实体并添加信息,但是我无法编辑它

我有一个列表视图控制器,它显示了这个信息的简要概述,另一个列表视图控制器充当模态视图,允许用户编辑他们的信息。

当用户点击列表项时,我需要应用程序显示模态视图控制器,其中所选信息从核心数据模型加载到相关文本框中,当用户单击保存时,我需要保存更改< / p>

当用户点击列表项时,信息未传递到模态视图中,NSLog确认对我来说 - 它告诉我在prepareForSegue:方法中点击的项目,并且在模态视图的viewDidLoad中为null:

这是代码:

这是来自MedsList视图控制器,它显示信息

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
}   //selMed declared at top of file as NSManagedObject *selMed;
    selMed = [self.meds objectAtIndex:indexPath.row];
    NSLog(@"SELECTED MED: %@",[selMed valueForKey:@"name"] );
    UIStoryboardSegue *segueString = [NSString stringWithFormat:@"%@",@"editMeds"];

    NSLog(@"%@",segueString);

NSLog(@"%@ %@", @"MED NAME",[self.meds objectAtIndex:indexPath.row]);

[self performSegueWithIdentifier:@"editMeds" sender:indexPath];

}

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

if ([segue  isEqual: @"editMeds"]) {

NSLog(@"%@ %@", @"SELMED AT PREPARE FOR SEGUE: ",selMed);
UINavigationController *nav = segue.destinationViewController;
MedsEditViewController *dest = (MedsEditViewController *)nav.topViewController;
    dest.med = selMed;
    dest.chName = [selMed valueForKey:@"name"];//chosen med's name
}

    }
}

这是MedsEdit.m

#import "MedsEditViewController.h"
#import "fibroMappAppDelegate.h"
#import <CoreData/CoreData.h>

@interface MedsEditViewController ()
{
    NSManagedObjectContext *context;
}
@end

@implementation MedsEditViewController


@synthesize tbName;
@synthesize tbDose;
@synthesize tbMaxDose;
@synthesize tbType;
@synthesize med;
double dose;
double maxDose;



- (void)viewDidLoad
{ 
    [super viewDidLoad];

    NSLog(@"%@ %@", @"recieved MEDICATION", self.med);
    NSLog(@"%@ %@", @"recieved Name", _chName);
    fibroMappAppDelegate *delegate = [[UIApplication sharedApplication]delegate];
    context = [delegate managedObjectContext];

    tbName.text = _chName;
}

chName在.h文件中声明为NSString

有人可以帮我弄清楚我做错了什么吗?以及如何解决这个问题.....我在过去的几个月中花了很多时间来打开和关闭

这是准备segue启动后的日志副本

2013-11-07 14:21:15.475 fibromapp [660:70b] SELECTED MED:med1

2013-11-07 14:21:15.476 fibromapp [660:70b] editMeds

2013-11-07 14:21:15.477 fibromapp [660:70b] MED NAME(实体:药物; id:0x8a6b0a0;

数据:{

剂量= 3;

lastTaken = nil;

maxDose = 5;

name = med1;

type = Miligrams;

})

2013-11-07 14:21:15.479 fibromapp [660:70b]警告:在演示过程中尝试演示!

---------------------以下是在MedsEdit viewDidLoad ------------------- ------

2013-11-07 14:21:15.497 fibromapp [660:70b]接受了药物治疗(null)

2013-11-07 14:21:15.498 fibromapp [660:70b]收到姓名(null)

3 个答案:

答案 0 :(得分:1)

[segue isEqual: @"editMeds"][segue.identifier isEqualToString: @"editMeds"]开始......

答案 1 :(得分:0)

您是否曾尝试将MedsEditViewController设置为segue.destinationViewController?

答案 2 :(得分:0)

首先,您发布的代码中的哪个位置实际上是在目标控制器上设置med?我明白了

dest.med = selMed

但它被注释掉了。如果您从未设置它,那么它将永远不可用。你可以重新格式化并发布完整的日志吗?我不清楚你的代码是否已达到SELMED AT PREPARE FOR SEGUE日志。

假设您不想对此进行评论,或者您收到错误我认为它可能在此处 - UINavigationController *nav = segue.destinationViewController - 除非您的MedsEditViewController实际上是UINavigationController我怀疑{{1}导航控制器,它将呈现您的segue.destinationViewController。仔细检查UINavigationController的文档,但我认为你需要这个:

MedsEditViewController