【问题标题】:Using objects in an NSArray在 NSArray 中使用对象
【发布时间】:2010-07-08 19:03:55
【问题描述】:

嘿,我在这样创建的字典中有这些 UIView 对象:

- (NSArray *)createNumberOfViews:(NSInteger)number
{
NSMutableArray *viewArray = [NSMutableArray array];
for(NSInteger i = 0; i < number; i++)
{
    UIView *view = [[UIView alloc] init];
    // any setup you want to do would go here, e.g.:
    // view.backgroundColor = [UIColor blueColor];
    [viewArray addObject:view];
    [view release];
}
return viewArray;
}

所以现在我需要访问这个数组的每个成员并将它们分别添加到一个超级视图中,有什么想法可以继续执行此操作吗?

【问题讨论】:

  • 快速浏览一下 NSArray 的文档(如果需要,还有 UIView)会告诉你方法
  • 这确实是样式/偏好的问题,但除非返回的数组将被修改,否则您应该返回一个不可变的数组..return [NSArray arrayWithArray:viewArray];。否则你应该改变你的方法声明返回NSMutableArray
  • @ohhorob:这确实是一个偏好问题。他的数组是一个 NSMutableArray 的事实是一个实现细节,就像所有 NSArrays 实际上都是 NSMutableArrays 一样(说真的,检查[[NSArray arrayWithObject:@"Hello"] isKindOfClass:[NSMutableArray class]])。他的方法签名是准确的,他的方法实现是高效的,所以真的没有必要把事情复杂化或暴露私有的实现细节 IMO。
  • 我想我很清楚我的评论“真的是风格/偏好问题”!就个人而言,我为什么声明应该“声明”(是的,真的!)可变/不可变类集群的实际返回类型的原因是它可以提供对阅读和使用代码有用的语义。归根结底,这没什么大不了的,但仍然是一个有用的习惯。

标签: iphone objective-c xcode uiview


【解决方案1】:

只要得到那个方法的结果和enumerate through it:

for (UIView *view in [self createNumberOfViews:42]) {
    [yourSuperview addSubview:view];
}

【讨论】:

    【解决方案2】:

    如果你有 NSArray *views = [self createNumberOfViews:10] 然后使用

    [(UIView *) addSubview[views objectAtIndex:number]];
    

    应该可以。如果没有,请发表评论,但这是非常基本的。
    编辑:哎呀。不太明白。修正了代码:P

    【讨论】:

    • 不完全。 @Ollie 询问是否将数组中的每个视图添加到超级视图;您正在向数组中的每个视图添加子视图
    【解决方案3】:

    请试试这个

    for(NSInteger i = 0; i < [viewArray count]; i++)
    {
         UIView *view = (UiView*)[viewArray objectAtIndex:i];
         [parentView addObject:view];   // parentView = your super view
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      相关资源
      最近更新 更多