Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UIView内的UIButton UIScrollview内的UIView,ARC问题_Objective C_Uiscrollview_Uibutton_Ios5_Automatic Ref Counting - Fatal编程技术网

Objective c UIView内的UIButton UIScrollview内的UIView,ARC问题

Objective c UIView内的UIButton UIScrollview内的UIView,ARC问题,objective-c,uiscrollview,uibutton,ios5,automatic-ref-counting,Objective C,Uiscrollview,Uibutton,Ios5,Automatic Ref Counting,这是一个iOS5和ARC特定的问题 我在UIScrollView中设置了一组UIView,每个UIView都在UIView类中声明了自己的UIButton: IBOutlet UIButton*button; @property(nonatomic,strong) UIButton*button; (我也把它作为一种保留,而不是强大,但它没有什么区别) 我还合成了按钮并将其连接到IB中: -(IBAction)showArticle:(id)sender;

这是一个iOS5和ARC特定的问题

我在UIScrollView中设置了一组UIView,每个UIView都在UIView类中声明了自己的UIButton:

      IBOutlet UIButton*button;
      @property(nonatomic,strong) UIButton*button;
(我也把它作为一种保留,而不是强大,但它没有什么区别)

我还合成了按钮并将其连接到IB中:

      -(IBAction)showArticle:(id)sender;
根据文章的类型,我使用一个大循环将它们全部添加到滚动视图中:

       NewsScrollLead*view = [[NewsScrollLead alloc]initWithNibName:@"NewsScrollLead"  bundle:nil];

       [view.view setFrame:CGRectMake(0, 0, 513, 225)];
       [view.titleLabel setText:[newsDict objectForKey:@"title"]];
       [view.details setText:[self flattenHTML:[newsDict objectForKey:@"description"]]];
       [view.source setText:[newsDict objectForKey:@"author"]];

       [view.details setFont:[UIFont fontWithName:@"HelveticaNeue-Condensed" size:14]];
       [view.titleLabel setFont:[UIFont fontWithName:@"HelveticaNeue-BoldCond" size:20]];
       [view.source setFont:[UIFont fontWithName:@"HelveticaNeue-Condensed" size:14]];

       [self.newsScrollView addSubview:view.view];
这是如何创建视图并将其添加到滚动视图的一个示例

当我试图点击一个按钮时,我每次都会从不同的地方得到一个无法识别的选择器错误,而不是UIButton。使用NSZombie时,由于某种原因,该按钮被取消分配

有什么想法吗?通过保留UIButton或其中包含的视图,解决了相同类型的iOS5之前的问题,但ARC没有可用的保留功能。

您有以下几点: -一个名为view的NewsScrollLead对象(我们称之为N) -在N内部有一个视图(我们称之为V) -在N里面还有一个UIB按钮 -然后将视图V添加到self.newscroll视图中

N怎么了?嗯,它被取消分配是因为它从未被使用过。因此B也被解约了。剩下的唯一一项是V


你的问题是,你创造了V,这是无用的。保留N并将其添加到self.newsScrollView。为什么N里面需要一个V?或者,如果您确实需要N来存储所有种类的项目,那么N应该是一个NSObject(而不是NSView),self应该有一个数组属性来存储您创建的所有N个对象。

我发现的一个临时修复方法是以编程方式添加按钮,如下所示:
UIButton*button=[[UIButton alloc]initWithFrame:cRectMake(0,0,view.view.frame.size.width,view.view.frame.size.height);
[button setTag:i];
[button addTarget:self action:@selector(presentArticle:)forControlEvents:uicontrolEventTouchInside];
这解决了问题,按钮从未解除锁定,但不是问题的真实答案。你确定是按钮解除锁定吗?这没有什么意义。在我看来,它就像你的NewsScrollLead视图控制器(按钮的目标?)可能在您显示的内容中取消分配。错误中无法识别的选择器是什么?UIView子类是什么(NewsScrollLead看起来像UIViewController子类)?在我看来,您创建的NewsScrollLead*视图没有保留在任何位置,因此这可能是发布的内容。向类中添加一个数组,并将这些数组添加到数组中,以便您维护它们的句柄,并查看这是否解决了问题。