我有一个让我感到困惑的间歇性错误。关于如何追踪它或可能是什么原因的任何建议都非常感谢。
我有一个带有几个标签的“DetailView”,一个图像视图和一个文本视图。在导航栏中,我还有一个相机按钮,用于打开图像选择器并拍摄照片(稍后添加到图像视图中)。基本的东西。
有时,在拍摄照片然后编辑文本时:导航栏和键盘之间的整个视图变为空白(以我的背景颜色)。更常见的是“第一次”。重复该过程不会产生同样的问题。几乎只发生在3G上(在3G和原始iPhone上非常罕见)。
我有两种理论。
1是它与滚动视图有关,滚动视图是消失的GUI元素的容器。视图层次结构为:ScrollView - > UIView - >标签,文字和图像。将scrollview作为“主要”视图是一件坏事吗?
2是它与内存有关。 3G有一个更好的相机,并拍摄更大的图片...如果应用程序在拍照时获得低内存警告(可能会出现这种情况),可能会发生什么?
这两个中的任何一个都可行吗?关于要寻找什么的任何其他想法?
感谢
更新: 两个同时动画会导致错误吗?
在KeyboardWillShow通知中,我使用UIView beginAnimations ... commitAnimations调整ScrollView的大小(之后我认为这是异步发生)我也告诉滚动视图为scrollView的scrollRectToVisible。
像这样: [UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:animationDuration];
[UIView setAnimationCurve:animationCurve];
CGRect rect = [[self view] frame];
rect.size.height -= keyboardFrame.size.height * (up? 1 : -1);
[[self view] setFrame: rect];
[UIView commitAnimations];
// Scroll the active text field into view.
DetailView *tempScrollView = (DetailView *) [self view];
CGRect textFieldRect = [comments frame];
[tempScrollView scrollRectToVisible:textFieldRect animated:YES];
答案 0 :(得分:0)
3GS还拥有3G /原始内存的两倍(256MB对128),所以我怀疑它与内存有关。但是,您可以覆盖didReceiveMemoryWarning:来检查。
视图何时变为空白?它是自发发生的,还是只有当您按某个按钮等时才会发生。例如,它是否只在您开始编辑文本视图时(即弹出键盘时)?如果是这样,请检查您的视图自动调整掩码。
视图真的消失了,还是只是屏幕外?尝试将它们的帧打印到控制台或使用调试器检查它们应该在哪里。
当你发现错误时,请发布你的解决方案 - 这听起来像是我有一天可能遇到的问题。
答案 1 :(得分:0)
我设法在Sim中追踪它。 在这里:
在这些情况下,视图将收到两个 UIKeyboardWillShowNotification 是彼此...所以我复制的示例代码用于调整视图大小运行twise ...使其成为416px - 216px - 216px = -16px in身高......不是一件好事。
双重通知的原因当然是ViewController将自己添加为viewDidLoad中的观察者......当内存警告后出现“视图”时,它再次运行......但ViewController从未将自身删除为观察者。
这样做肯定会修复错误:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}