use*_*374 1 iphone cocoa-touch objective-c uiviewcontroller
问题1)
我有一个基于导航的应用程序,点击一个条目打开第二个视图,其中包含该条目的详细信息.
它现在正在使用以下代码
[self.navigationController pushViewController:descriptionController animated:YES];
[self.descriptionController.textView setText:[s description]];
self.descriptionController.title = [s name];
Run Code Online (Sandbox Code Playgroud)
但是,如果我切换第一个和第三个语句,那么当我第一次单击某个项目时,详细信息视图会显示Lorem Ipsum文本.在第一次之后,它按预期工作.我认为这样做会更正确.为什么它会在第一个视图中显示Lorem Ipsum,但之后没有显示任何内容?
问题2)
此外,我的textView元素是详细信息视图的一部分.在我的控制器类中,我有以下视图:
@property( nonatomic, retain) IBOutlet UITextView *textView;
Run Code Online (Sandbox Code Playgroud)
但是,如果我改变它
@property( nonatomic, copy) IBOutlet UITextView *textView;
Run Code Online (Sandbox Code Playgroud)
然后它崩溃了.我不认为它会崩溃,但我认为它只是创建新的实例,只是占用内存.任何人都能解释一下吗?
问题是 - [UIViewController视图]及其所有子视图都是懒惰填充的,可以是从NIB或在loadView中以编程方式填充的.所以:
//At this point descriptionController.view == nil && textView == nil
[self.navigationController pushViewController:descriptionController animated:YES];
//At this point descriptionController.view and textView are set
[self.descriptionController.textView setText:[s description]];
self.descriptionController.title = [s name];
Run Code Online (Sandbox Code Playgroud)
因此,如果你按下交换推送(加载视图)后的其他行"
[self.descriptionController.textView setText:[s description]];
self.descriptionController.title = [s name];
//At this point descriptionController.view == nil && textView == nil
[self.navigationController pushViewController:descriptionController animated:YES];
//At this point descriptionController.view and textView are set
Run Code Online (Sandbox Code Playgroud)
您正在将设置消息发送到nil值(不执行任何操作),然后使用其默认值加载视图.
在我的控制器类中,我有以下视图:
Run Code Online (Sandbox Code Playgroud)@property( nonatomic, retain) IBOutlet UITextView *textView;
但是,如果我改变它
Run Code Online (Sandbox Code Playgroud)@property( nonatomic, copy) IBOutlet UITextView *textView;
然后它崩溃了.
因为UITextView不符合NSCopying.
归档时间: |
|
查看次数: |
370 次 |
最近记录: |