2013-08-26 50 views
2

我正在製作一個應用程序,將幫助有特定健康狀況的人管理他們的藥物。我創建了一種模式來添加使用核心數據工作並保存新葯物的藥物。'NSInvalidArgumentException',原因:' - [UINavigationController setMed:]:無法識別的選擇發送到實例0x746dda0'

我現在正試圖讓人們在保存後編輯藥物。要做到這一點,我試圖發送藥物的管理對象到「fibromappMedsEditViewController」,並在類的viewDidLoad方法中分配信息。

我不斷收到此錯誤:

'NSInvalidArgumentException', reason: '-[UINavigationController setMed:]: unrecognized selector sent to instance 0x746dda0' 

有誰告訴我什麼,我做錯了什麼?

在fibromappMedsListViewController.m相關方法

- (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); 

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

} 

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


    NSLog(@"%@",segue.destinationViewController); 

    NSLog(@"%@",[selMed valueForKey:@"name"]); 

    fibroMappMedsEditViewController *dest = segue.destinationViewController; 
    dest.med = selMed; 


} 

的fibroMappMedsEditViewController.h

#import <UIKit/UIKit.h> 

@interface fibroMappMedsEditViewController : UITableViewController 
- (IBAction)saveChanges:(id)sender; 
- (IBAction)deleteBtnPressed:(id)sender; 
- (IBAction)dosageChanged:(id)sender; 
- (IBAction)maxDosageChanged:(id)sender; 
- (IBAction)cancel:(id)sender; 
- (IBAction)typeChanged:(id)sender; 

@property (weak, nonatomic) IBOutlet UITextField *tbName; 
@property (weak, nonatomic) IBOutlet UITextField *tbDose; 
@property (weak, nonatomic) IBOutlet UITextField *tbMaxDose; 
@property (weak, nonatomic) IBOutlet UITextField *tbType; 
@property (weak, nonatomic) IBOutlet UIStepper *stepperDose; 
@property (weak, nonatomic) IBOutlet UIStepper *stepperMaxDose; 
@property (weak, nonatomic) IBOutlet UISegmentedControl *changeMeasure; 
@property (strong, nonatomic) NSManagedObject *med; 

@end 

的fibroMappMedsEditViewController.m - 只是我改變影響的方式,部分控制器負載

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

@interface fibroMappMedsEditViewController() 

@end 

@implementation fibroMappMedsEditViewController 


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

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    tbName.text = [med valueForKey:@"name"];//name is a string in the model 
    tbDose.text = [med valueForKey:@"dose"];//dose is a double in the model 
    tbMaxDose.text = [med valueForKey:@"maxDose"];//maxDose is a double in the model 
    tbType.text = [med valueForKey:@"type"];//type is a string in the model 

} 

如果您需要查看其他內容,請隨時詢問。

此外,我正在使用這個應用程序的故事板。

+0

這是什麼表現?的NSLog(@ 「%@」,segue.destinationViewController); – rdelmar

+0

回答

8

從該日誌中可以看出,您的fibroMappMedsEditViewController(應該以大寫字母BTW開頭)嵌入導航控制器中。你需要去那個導航控制器的根視圖控制器。

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    UINavigationController *nav = segue.destinationViewController; 
    fibroMappMedsEditViewController *dest = (fibroMappMedsEditViewController *)nav.topViewController; 
    dest.med = selMed; 
} 
+0

感謝,現在犯規崩潰,但它確實給我一個警告:「不兼容的指針類型初始化‘fibroMappMedsEditViewController * __強’有型‘的UIViewController *’的表達」 也出於某種原因它不顯示來自模式文本框中的med值:/ –

+0

@JamieMcAllister,它只需要一個強制轉換即可解決該警告。我已經更新了我的答案以證明這一點。至於另一個問題,如果你在viewDidLoad中記錄self.med,那會給你什麼? – rdelmar

+0

謝謝,修復了警告.....並且它給了null:/ –

相關問題