gpt4 book ai didi

objective-c - 从动态实例化的类(objective-c)设置主视图 Controller 中的属性值

转载 作者:行者123 更新时间:2023-11-29 13:48:07 27 4
gpt4 key购买 nike

我对此完全没有想法......我尝试了太多变体,以至于我头晕......

我有一个主 UIViewController,只需按一下按钮,它就会将另一个 UIViewController 添加到它的一个 subview 中。添加动态 UIVC 后,主 UIVC 中的属性将更新以保存对其的引用(称为 currentObject)。这工作正常。

我遇到的问题是,如果我添加另一个动态 UIVC,保存引用的属性最初会正确更新,但无论我尝试什么,当我触摸第一个动态 UIVC 时,我都无法更新属性.我尝试从动态 UIVC 设置“currentObject”的所有内容都会给我一个“无法识别的选择器发送到类”错误,然后放弃。

一开始我不想把代码放到这篇文章中。不确定我会发布哪些有用的内容。

提前致谢!

更新:

在 DynamicModuleViewController.h 中:

@interface DynamicModuleViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverControllerDelegate, UIGestureRecognizerDelegate, UITextViewDelegate, UIApplicationDelegate, MFMailComposeViewControllerDelegate>{

DynamicModule *currentObject;

}

@property(nonatomic, retain) DynamicModule *currentObject;

在 DynamicModuleViewController.m 中:

@implementation DynamicModuleViewController

@synthesize currentObject;

-(void)addObject:(id)sender
{
DynamicModule *dm = [[DynamicModule alloc]init];
// positioning and PanGesture recognition code to allow dragging of module
currentObject = dm;
[mainView addSubview:currentObject.view];
}

@end

当以这种方式添加时,通过点击按钮,它工作正常。

在实例化更多 DynamicModule 后,我需要使用上次点击的 DynamicModule 更新 currentObject。

最佳答案

adds another UIViewController to one of its subviews

首先,这对我来说是一个危险信号。将 UIViewController 的 View 添加为 subview 几乎总是管理 View 层次结构的错误方法,也是 iOS 应用程序中的常见错误。请看http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/这样我就可以专注于主题,避免重复自己。

currentObject = dm;

这会直接设置支持您的 currentObject 属性的 ivar。您正在泄漏 currentObject 的先前值。您似乎没有从 mainView 中删除先前的 currentObject View 。我怀疑您正在将 currentObject 设置为自动释放的对象,由于绕过了 setter 而无法保留它,并最终尝试向已释放的对象发送消息,导致“无法识别的选择器”错误当您尝试引用不再存在的对象时,您的消息到达现在占用该内存地址的任何其他对象或 BAD_ACCESS 错误。

self.currentObject = foo 等同于 [self setCurrentObject:foo] 并且可能是您想要的。

关于objective-c - 从动态实例化的类(objective-c)设置主视图 Controller 中的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com