在IOS中重用Object

时间:2013-08-03 06:35:38

标签: objective-c uikit

在其他语言中,我可以这样做:

for(int i = 0; i < numObjects; i++)
{
    Object obj = new Object();
    UI.Display(obj.text = array[i]);
}

我将获得一个包含多个不同文本对象的显示。

然而,当使用ARC打开Xcode 4+中的Objective-C编程时,没有“新的”初始化器。所以,当我做类似的事情时:

for(NSString *s in testArray) {
    NSArray nibObjects =  [[NSBundle mainBundle] loadNibNamed:@"Page" owner:self options:nil];
    UIView subview = [nibObjects lastObject];
    ... //Add some custom images or text
    [scrollView addSubview:subview];
}

我只得到一个视图。我假设因为它仍然引用相同的内存位置。当我在滚动视图中使用它时说5个不同的视图,只有最后一个工作。其余的都是空白的。

关于我应该如何在scrollview中重用自定义nib布局的任何建议?它需要是动态的,因为我添加的数字会发生变化。

- 编辑 -

另一次没有结果的尝试

for (int i = 0; i < 4; i++) {

    NSArray *nibObjects = [[NSArray alloc]init];
    nibObjects =  [[NSBundle mainBundle] loadNibNamed:@"Page" owner:self options:nil];

    //Move frame location
    CGRect frame;
    frame.origin.x = scrollView.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = scrollView.frame.size;

    UIView *subview = [[UIView alloc] initWithFrame:frame];
    subview = [nibObjects lastObject];
    [scrollView addSubview:subview];
}
 scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 4, scrollView.frame.size.height);

1 个答案:

答案 0 :(得分:1)

  

没有'新'初始值设定项

在Objective-C中,您通过向类发送alloc消息然后向返回的实例发送init...消息来初始化对象。如果您不知道如何初始化对象,请首先阅读基本的Objective-C文献。

NSArray nibObjects =  [[NSBundle mainBundle] loadNibNamed:@"Page" owner:self options:nil];
UIView subview = [nibObjects lastObject];

loadNibNamed返回一个BOOL,而不是NSArray,即使它返回NSArray,它也会返回指向{{}的指针1}}对象。假设您实际上有一个指向NSArray NSArray的指针,UIViews将始终返回相同的对象(同样,它将返回指向[nibObjects lastObject]的指针)。