将委托附加到数组中的对象

Posted

技术标签:

【中文标题】将委托附加到数组中的对象【英文标题】:Attaching a delegate to an object in an Array 【发布时间】:2012-07-20 15:32:37 【问题描述】:

我创建了一个自定义 UIView,并为其附加了一个委托 - 一切都很好!

但是,这些 UIView 中有 60 个是在一个数组中循环创建的。 当我尝试将代理附加到这些美女之一时,我收到此分析警告:Property 'delegate' not found on object of type '__strong id'

希望这是一些简单的语法问题?

这很好用:

myUIView *aSimpleTest = [[myUIView alloc] init…];
aSimpleTest.delegate = self;   //nice!
...

这不是:

for (i=0; i<60; i++)
    [arrayOfItems addObject:[[myUIView alloc] init…];
    [arrayOfItems objectAtIndex:i].delegate = self;//error, as above
    ...

不胜感激。 (希望我不必再花一天时间学习新东西!)

【问题讨论】:

【参考方案1】:

试试这个:

for (i=0; i<60; i++)
    myUIView *view = [[myUIView alloc] init…];
    view.delegate = self;
    [arrayOfItems addObject:view];
    ...

编辑: 您收到错误是因为 [arrayOfItems objectAtIndex:i] 返回的 id 没有 delegate 属性。您还可以执行以下操作:

myUIView *view = (myUIView*)[arrayOfItems objectAtIndex:i];
view.delegate = self;

或:

[[arrayOfItems objectAtIndex:i] setDelegate:self];

【讨论】:

您的第一个解决方案有效,您的最后一个解决方案也有效。非常感谢您的帮助! :)【参考方案2】:

在你的循环中做:

myUIView *tempView = (myUIView*)[arrayOfItems objectAtIndex:i];
tempView.delegate = self;

【讨论】:

troolee 的建议效果很好,但还是感谢 rooster117。【参考方案3】:

使用演员表:

((MyUIView*)[arrayOfItems objectAtIndex:i]).delegate = self;

(需要注意的一点,顺便说一句:总是以大写字母开头你的类名。)

【讨论】:

以上是关于将委托附加到数组中的对象的主要内容,如果未能解决你的问题,请参考以下文章

Swift-使用委托将数据附加到 CollectionView 中的 TableView

将序列号属性附加到javascript中的对象数组

使用 NodeJS 将新对象附加到 DynamoDB 中的 JSON 数组

将对象附加到 UIActionSheet

将数组中的值附加到 BehaviorSubject

将嵌套结构中的数组附加到另​​一个嵌套结构中的另一个数组