기본적으로 내 문제는 루프를 통해 UIView 인스턴스를 3 개 만들려고한다는 것입니다. 나는 ARC를 사용하고 있으며, 내가하고 싶은 일이 가능하다는 것을 정말로 알지 못한다.IOS - ARC를 사용하여 루프를 통해 새 객체 인스턴스 만들기
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"RoomView"
owner:self
options:nil];
NSMutableArray *roomViews = [[NSMutableArray alloc] initWithCapacity:[gtb.rooms count]];
for (i = 0; i < [gtb.rooms count]; i++)
{
RoomView *rcv = [[RoomView alloc] init];
NSDictionary *room = [gtb.rooms objectAtIndex:i];
rcv = [nibViews objectAtIndex:0];
NSLog(@"Start rcv = %@", rcv);
rcv.roomNumber.text = [NSString stringWithFormat:@"Chambre %d", i + 1];
rcv.roomType.text = [room objectForKey:@"roomType"];
[rcv setFrame:CGRectMake(0, sizeOfContent, rcv.frame.size.width, rcv.frame.size.height)];
sizeOfContent += rcv.frame.size.height;
[roomViews addObject:rcv];
NSLog(@"End rcv = %@", rcv);
}
for (i = 0; i < [gtb.rooms count]; i++)
NSLog(@"Room #%i : %@", i, [roomViews objectAtIndex:i]);
그리고 여기에 내가 로그에있는 내용은 다음과 같습니다 : 여기에 내가 현재 가지고있는 코드는
2012-09-20 10:15:00.287 AppName[2792:707] Start rcv = <RoomView: 0x148570; frame = (0 0; 320 107); autoresize = W+H; layer = <CALayer: 0x148510>>
2012-09-20 10:15:00.289 AppName[2792:707] End rcv = <RoomView: 0x148570; frame = (0 420; 320 107); autoresize = W+H; layer = <CALayer: 0x148510>>
2012-09-20 10:15:00.312 AppName[2792:707] Start rcv = <RoomView: 0x148570; frame = (0 420; 320 107); autoresize = W+H; layer = <CALayer: 0x148510>>
2012-09-20 10:15:00.314 AppName[2792:707] End rcv = <RoomView: 0x148570; frame = (0 527; 320 107); autoresize = W+H; layer = <CALayer: 0x148510>>
2012-09-20 10:15:00.316 AppName[2792:707] Start rcv = <RoomView: 0x148570; frame = (0 527; 320 107); autoresize = W+H; layer = <CALayer: 0x148510>>
2012-09-20 10:15:00.317 AppName[2792:707] End rcv = <RoomView: 0x148570; frame = (0 634; 320 107); autoresize = W+H; layer = <CALayer: 0x148510>>
2012-09-20 10:15:00.319 AppName[2792:707] Room #0 : <RoomView: 0x148570; frame = (0 634; 320 107); autoresize = W+H; layer = <CALayer: 0x148510>>
2012-09-20 10:15:00.323 AppName[2792:707] Room #1 : <RoomView: 0x148570; frame = (0 634; 320 107); autoresize = W+H; layer = <CALayer: 0x148510>>
2012-09-20 10:15:00.325 AppName[2792:707] Room #2 : <RoomView: 0x148570; frame = (0 634; 320 107); autoresize = W+H; layer = <CALayer: 0x148510>>
내가 ARC를 사용하지 않을 경우 나도 알아, 내가 마지막에 [rcv autoRelease]
같은 것을 배치해야 루프의, 그러나 ARC와, 나는 할 수 없다.
해결 방법이 있습니까? 아니면이 파일에 대해 ARC를 비활성화해야합니까?
도움 주셔서 감사합니다.
루프에 UIView의 인스턴스를 만들지 않습니다. 인스턴스는'loadNibNamed :'를 호출 할 때 분명히 생성됩니다. 그들은 단지'nibViews'에서'roomViews'로 전달됩니다. – ThomasW
내 게시물을 편집했습니다. 그러나 객체를 Array에 추가하면 모든 객체가 마지막 객체의 속성을 사용하는 것처럼 보입니다. –
오, 그건 [nibViews objectAtIndex : i] 대신'[nibViews objectAtIndex : 0]'을 호출하기 때문입니다. – ThomasW