【问题标题】:set property in another viewcontroller在另一个视图控制器中设置属性
【发布时间】:2014-03-03 18:30:35
【问题描述】:

您好,我试图在 masterviewcontoller 中设置一个属于另一个视图控制器的属性,但它不会进入 set 方法。我已经使用 Masterviewcontroller 到 Detailviewcontroller 完成了此操作,并且工作正常。现在我复制该代码并尝试对 masterviewcontroller 执行相同操作到名为 AddNoteViewController 的控制器。相同的代码,但它不会进入 set 方法。 我将两个类都导入了相同的 感谢您的帮助!

在调试这个工作

第 1 步 masterviewController.m

//MasterViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDate *object = _objects[indexPath.row];
NSDate *kundnr = _kundnr[indexPath.row];
self.detailViewController.detailItem = object;
self.detailViewController.detailIdentity = kundnr;
self.addNoteViewController.AddNoteFtgnr = kundnr;

}

Step2 DetailViewController.h

//DetailViewController.h
@property (strong, nonatomic) id detailItem;
@property (strong, nonatomic) id detailIdentity;

第三步 DetailViewController.m

//DetailViewController.m
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
    _detailItem = newDetailItem;

    // Update the view.
    [self configureView];
}

if (self.masterPopoverController != nil) {
    [self.masterPopoverController dismissPopoverAnimated:YES];
}        
}

- (void)setDetailIdentity:(id)newDetailItentity
{
if (_detailIdentity != newDetailItentity) {
    _detailIdentity = newDetailItentity;

    // Update the view.
    [self configureView];
}

if (self.masterPopoverController != nil) {
    [self.masterPopoverController dismissPopoverAnimated:YES];
}
}

现在 AddNoteviewController 不起作用了

第 1 步 masterviewController.m (我认为这没问题)

//MasterViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDate *object = _objects[indexPath.row];
NSDate *kundnr = _kundnr[indexPath.row];
self.detailViewController.detailItem = object;
self.detailViewController.detailIdentity = kundnr;
self.addNoteViewController.AddNoteFtgnr = kundnr;

}

第 2 步 AddNoteViewController.h (我认为这没问题)

//AddNoteViewController.h
@interface AddNoteViewController : UIViewController

@property (strong, nonatomic) id AddNoteFtgnr;
@end

第 3 步 AddNoteViewController.m (这是错误的地方,根本不在这里介入)

//AddNoteViewController.m
-(void)setAddNoteFtgnr:(id)AddNoteFtgnr
{

//Code that sets the property

}

【问题讨论】:

  • 您是否在masterviewController 的任何地方初始化了addNoteViewController
  • 我在 .m 中做了一个#import,在 .h 中我做了类 AddViewController;和我为详细视图所做的完全一样的属性

标签: ios objective-c uiviewcontroller


【解决方案1】:

您的主视图控制器的 detailViewController 属性可能为零。在 tableview:didSelectIndexPath: 方法中设置断点并检查 detailViewController 属性。如果你不知道如何设置断点,那么在显示 self.detailViewController 中的值的方法开头添加一条 NSLog 语句。 (并了解断点。)

【讨论】:

  • 是的,我知道如何设置断点以及调试时会发生什么,我已经解释过了。它不是主 -> 细节问题,它是 AddNoteViewController 和细节的主 -> AddNoteView 控制器不起作用,或者我试过了
  • 如果您的 setter 没有被调用,那么您的 setter 名称定义不正确,或者您的主视图控制器中的 addNoteViewController 属性为 nil。
  • 有一点是错误的:属性名称应该以小写字母开头,并且应该使用self.addNoteViewController.dddNoteFtgnr = kundnr; 之类的代码来设置它们。但是,自定义setter方法应该定义为-(void)setAddNoteFtgnr:(id)addNoteFtgnr,其中方法的名称以单词'set'开头,然后将属性名称的第一个字母切换为大写字母。我不知道这是否是问题的原因,但它是错误的,应该修复。
  • 我删除了我的代码,这次用小写再次编码。调试时仔细观察,在masterviewcontroller.m中设置属性后直接进入masterviewcontroller.h和代码@property (strong,nonatomic) AddNoteViewController *addNoteViewController;然后它直接回到 masterViewController.m 并且什么也不做。我试图在我的 AddNoteViewController 中设置 viewdidload 中的属性,这很好。
【解决方案2】:

投反对票

我解决了我的问题。

在 MasterviewController 中,我必须初始化没有发生的视图控制器。

AddNoteViewController* addNoteViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"addNoteViewController"];

addNoteViewController.addNoteFtgNr = kundnr;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2013-07-31
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多