- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新 - 已找到原因!...请阅读以下内容并提出解决方案:
在创建视频来展示此问题时,我发现了为什么会发生这种情况......
当 .m
文件中的 #imports
和 @implementation DetailViewController
之间定义的任何控件/元素都会被原始 detVC 丢失。 VC 创建了新实例。
示例:我提供了一个重现此问题的视频。如图所示,除了 UISegmentedControl
和 UILabel
之外,所有控件都可以工作。这两个控件在 DetailViewController.m
中定义为:
#import "DetailViewController.h"
UISegmentedControl *sortcontrol;
UILabel *incrementLabel;
@implementation DetailViewController
视频链接 - http://www.youtube.com/watch?v=2ABdK0LkGiA
我认为我们已经非常接近了..等待答案!!
P.S.:我认为这些信息足以引导我们找到解决方案,但如果需要,我也可以共享代码。
<小时/>之前:
我们的应用程序中有一个DetailViewController (detVC),它通常是从UITableViewController“推送”的。
现在我们还实现了推送通知,只要通知到达,它就会“模态”地呈现相同的 detVC,而这又可以在任何 View Controller 上发生。
一切正常,直到通过通知呈现 detVC,而 detVC 的另一个实例已经是事件 View Controller (之前通过 TableView 推送)。
当所呈现的 detVC 被忽略时,就会出现问题 - 推送的 detVC “失去”对所有内容的控制 - 它没有指向与之前相同的数据,甚至导航工具栏上的 UISegmentedControl
也指向-1
按任意索引即可索引!
为什么当我们创建一个单独的 detVC 实例时会发生这种情况?为什么它会影响早期的 detVC?怎么解决/这里需要学习Objective C什么? (仅供引用,我们在项目中使用 ARC)
谢谢
<小时/>编辑 - 一些代码:
按下时:
ProductDetailViewController *detailViewController = [[ProductDetailViewController alloc] init];
detailViewController.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:detailViewController animated:YES];
detailViewController.serverOffset=serverOffset;
detailViewController.prdctIndex = indexPath.row;
通过通知呈现时:
- (void)displaySingleProduct:(NSDictionary*)userInfo{
ProductDetailViewController *onePrdVC = [[ProductDetailViewController alloc] init];
UINavigationController *addNav = [[UINavigationController alloc] initWithRootViewController:onePrdVC];
onePrdVC.justOne=YES;
onePrdVC.onePrdIDtoLoad=[[[userInfo valueForKey:@"prd"] valueForKey:@"id"] intValue];
[self.navigationController presentModalViewController:addNav animated:YES];
}
detVC 中有一个 Product
类,它从 SQLite 表中 prdctIndex 行存储的值中获取数据。
通过通知关闭所呈现的 detVC 后,推送的 detVC 的 Product
类开始指向所呈现的 detVC 中用于 Product
类的行。并且 viewDidAppear
中没有这样的代码会改变 Product
类。
所以,上面提到的这个 UISegmentedControl
问题和其他一些问题导致了痛苦!基本上,整个 detVC 的行为很奇怪 - 如果我们只是弹出并重新推送它,它就会重新工作!
编辑2
我有更多可能导致此问题的信息。如果我像这样在 viewDidAppear
上运行 viewDidLoad
:
if (!justOne) {
aProduct = [allProducts getProduct:(prdctIndex+1) one:NO];
[self viewDidLoad];
[self populateDetails];
}
插入的 detVC 重新获得控制权并且每个元素/控件开始按预期重新工作(但不是以理想的方式)。因此,很明显,所提供的 detVC 的单独实例确实弄乱了之前推送的 detVC,并且需要通过 viewDidLoad 重新设置所有控件/指针。
从这些信息中可以得出任何有用的结论吗?
最佳答案
当您在代码中编写时:
#import "DetailViewController.h"
UISegmentedControl *sortcontrol;
UILabel *incrementLabel;
@implementation DetailViewController
您没有将这些变量定义为实例变量 (ivars),因此它们对于每个实例来说并不是单独的。定义 ivars 有三种方法。1) 传统方式,在 .h
文件中。
@interface DetailViewController{
UISegmentedControl *sortcontrol;
UILabel *incrementLabel;
}
2) Objective-C 的一些补充增加了对接下来两种方式的支持。就像在 .m
文件中声明它们一样。
@implementation DetailViewController{
UISegmentedControl *sortcontrol;
UILabel *incrementLabel;
}
3) 如果这些 ivars 使用属性来公开它们,那么您可以简单地省略它们的显式定义。所以在 .h
中:
@interface DetailViewController
@property (strong, nonatomic) IBOutlet UISegmentedControl *sortcontrol;
@property (strong, nonatomic) IBOutlet UILabel *incrementLabel;
然后在.m
文件中:
@implementation DetailViewController
@synthesize sortcontrol;
@synthesize incrementLabel;
关于iphone - 为什么 ViewController 类的单独实例会影响前一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8872060/
我现在在另一个 ViewController 之上展示了一个几乎透明的 ViewController,但它禁用了与下面的 ViewController 的交互。这是我目前使用的代码: topContr
我有一个 View Controller ,其工具栏上有 3 个 UIButtons,可以打开一个新的 View Controller 作为弹出窗口。我在 Storyboard 中创建了 Segues
这个问题在这里已经有了答案: Delegates in swift? (15 个答案) 关闭 3 年前。 在我的场景中,我试图在关闭 View Controller 期间将值从 ViewContro
假设我有两个 viewController,AViewController 和 BViewController。 AViewController 嵌入在 NavigationController 中(
我有 3 个 View Controller A、B 和 C。 我在 vcA 上,我使用 推送 vcB [self.navigationController pushViewController:vc
我想知道如何在 VC3 和 VC1 之间传递数据。 我拥有的是 Root View (VC1)。然后你输入一个tableView,如果你选择一个项目,你将进入tableView2(VC3) - 类别
我在使用 Unwind Segue 时遇到问题。我有 3 个 ViewController,它们都在名为 ViewController.swift 的类下。我试图获取最后一个 ViewControll
我有一个应用程序,其左上角有一个汉堡菜单。按下时,菜单会以 90% 的不透明度淡入当前 ViewController,显示应用程序的主要导航选项。 我使用下面的代码从页面呈现 viewControll
我的问题是,当我呈现一个 UIViewController 时,呈现的 View 变黑了。 我有一个名为 mainViewController 的 UIViewController,它是我窗口的 Ro
例如,当我呈现UIActivityViewController或UIAlertController时,我仍然可以看到背景viewController,我不想在viewContollerA中嵌入view
我从second viewController进入了third viewController,但是我不想回到第二个viewController,我需要直接回到我的第一个viewController,我
我的应用程序是标签栏(+ 导航)应用程序。在 FirstViewController 中,我调用 onModalView。 -(void) onFilter { FilterViewControl
Photo Sharing 部分是我写的一个ViewController,当我按下正确的项目时,PhotoSharingViewController 会动画出现。 这是我的代码: PhotoShari
我正在尝试在另一个 View Controller 中使用 subview Controller 的应用程序。我有一个 VC,我正在实例化另一个 VC,并在外部 VC 内使用它自己的 xib。 我使用
我正在寻找有关包含 ViewController 的滚动的想法。我需要知道包含 View Controller 的位置。我已经尝试过 UIPageViewController 但我无法让滚动委托(de
我有一个带有嵌入式 NavigationController 的基本 ViewController 来提供工具栏。 ToolBar 有三个按钮,用于通过 segue 调用 ViewController
我的应用程序中的伙计们,我在应用程序委托(delegate)方法中有一些代码 application:didFinishLaunchingWithOptions:确定初始 View Controlle
我遇到了一个问题,我将对此进行描述,并且发现了一些类似的问题,但我认为与我的问题无关。 我有一个 UITabBarController,其中有 2 个用于 VC1 和 VC2 的选项卡。 VC1 转到
我的应用程序中有一个计时器。如果计时器达到 0,则用户将被带到失败页面。当这种情况发生时,之前的 ViewController 没有被关闭,导致更多的内存被占用。 如果出现失败页面,我希望关闭之前的
在问这个问题之前,我当然做了一些调查。我在 google 和 stackoverflow 上找到的链接或主题之一是: How do I load another view controller fro
我是一名优秀的程序员,十分优秀!