在我永无止境地寻求将表格行选择共享到模式视图中加载的多个视图中,我已经把它归结为一个问题。我正在使用 Apples DrillDownSave 示例代码作为模型来重现这种魔力。并认为我的设置完全一样...
在我的 RootViewController.m 的 didSelectRowAtIndexPath 部分中,我有以下代码将 violinMakers MSMutableArray 复制到同名的 DetailsView MSMuteableArray。所有颜色编码,没有错误告诉我我在正确的道路上..但是..
detailsView.violinMakers = [violinMakers objectAtIndex:indexPath.row];
在 RootviewController.h 文件中,我通过以下方式引用 DetailsViewController:
@class DetailViewController
DetailsViewController *detailsView;
NSMutableArray *violinMakers;
@property (nonatomic, retain) NSMutableArray *violinMakers;
然后在 DetailsViewController .h 文件中:
NSMutableArray *violinMakers;
IBOutlet UITextView *violinMakerDescription;
@property (nonatomic, retain) NSMutableArray *violinMakers; //tried assign or copy no difference
@property (nonatomic, retain) IBOutlet UITextView *violinMakerDescription;
在 DetailsViewController .m 文件中:
- (void)viewWillAppear:(BOOL)animated
ViolinMaker *violinMaker = (ViolinMaker *)violinMakers;
[violinMakerDescription setText: [violinMaker description]];
NSLog(@"violinMakerDescription in detailsView: %@", [violinMaker description]);
我有一个单独的类,如上所示,我用它来定义数据 violinMaker。这在 didSelectRowAtIndexPath 内的 rootviewcontroller 中工作正常,所以我知道这不是问题的一部分,我当然在 .m 文件中引用它。这一切都像往常一样连接在 IB 中,因为我测试它是否可以通过直接从 rootViewController 推送 DetailsViewController 来工作,并且数据可以很好地加载到 UITextView 中。
我正在从 RootviewController (tableViewColler) 的推送视图(完美运行)中启动 DetailsViewController,它通过以下方式作为模态视图启动:
DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil ];
UINavigationController *aDetailsViewController = [[UINavigationController alloc] initWithRootViewController:detailsViewController];
[self presentModalViewController:aDetailsViewController animated:YES];
// [violinMakerView release];
[DetailsViewController retain]; // or release no different
[aDetailsViewController release];
我在构建和视图加载时没有收到任何错误,但 textView 中的信息为空白。这也告诉我它没有加载任何内容,并且连接正确......我很接近......但我可以从我的 NSLog 中看到该值是:
violinMakerDescription in detailsView: (null)
因此 RootviewController 中的 violinMakers 不会被复制到 DetailsViewController 中的 violinMakers 数组中。我不想承认这一点,但是几周以来,我尝试了各种解决方案,通过 appDelegate、NSDictionary 和各种其他方式来让它工作,但无济于事。我认为答案是 violinMakers 被释放,所以什么都不传递,或者 RootViewController 中的分配行不起作用。有谁知道我可以改变什么?
我真的很感激一些帮助,我只是没有得到我所缺少的东西,但这是我得到的最接近的我只需要正确的链接,或者看看为什么没有保留这些值。如果有办法检查值的发布时间,我可以检查这个问题,也许就是这样。我试图在任何地方保留它(并在我让它工作后更正)但它就是不工作......帮助??
感谢大家!!!
真诚的柯克
尝试将 RootViewController 中的加载行更改为:
[detailsView.violinMakers addObject: [violinMakers objectAtIndex:indexPath.row]];
@Frank 首先感谢您对此的帮助!!我确实以相同的方式在 rootViewController 中设置了 violinMaker 对象,它在那里工作正常,如下所示:
violinMaker = [self.violinMakers objectAtIndex:indexPath.row];
ViolinMakerViewController *violinMakerViewController = [[ViolinMakerViewController alloc] initWithNibName:@"ViolinMakerViewController" bundle:nil];
self.violinMakerView = violinMakerViewController;
[[self navigationController] pushViewController:violinMakerView animated:YES];
[self.violinMakerView.violinMakerName setText:[violinMaker name]];
....
[self.violinMakerView.violinMakerDescription setText:[violinMaker description]];
NSLog(@"violinMaker description variable in RootView: %@", [violinMaker description]);
DetailsViewController.violinMakers = [violinMakers objectAtIndex:indexPath.row];
在这里,我在 NSLog 中看到它在这里加载得很好,所以我相信将它从 objectAtIndex:indexPath.row 加载到数组中,然后复制该数组并将其从 DetaisViewController 放入 ViolinMaker 对象中。我不想在 DetailsViewController 中重新创建 ViolinMaker 对象,只需像从 RootViewController 中一样从数组中重新加载它。
这就是 DrillDownSave Apple 示例的操作方式,并且我已镜像此配置。在didSelectRowAtIndex中的level1ViewController中,下面的代码
// provide the 2nd level its content
level2ViewController.listContent = [[listContent objectAtIndex:indexPath.row] objectForKey:kChildrenKey];
我不需要关键部分,因为那是为了回忆位置。示例代码中的两个控制器都使用同名的 NSArray,它似乎通过这一行将 L1 数组复制到 L2 数组。
他们使用推送的 TableViews,这很容易,但我不只是这样做,IBOutlets 将信息加载到 UITextView 的,所以我必须在 RootView 控制器中分配数组,选择发生的地方。如果我可以保留在 RootView 控制器中分配的 ViolinMaker,那么我可以在详细信息中选择它,但我似乎也无法弄清楚......
谢谢你帮助我,我真的卡住了..