일반적으로 테이블뷰를 사용할때 아래 코드를 사용한다.


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
	static NSString *cellIndentifier = @"ExampleCell";
	UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier: cellIndentifier];

	if(cell == nil)
	{
		NSArray *bundleObjects = [[NSBundle mainBundle]loadNibNamed: cellIndentifier owner:nil options:nil];
		cell = [bundleObjects lastObject];
	}

	return cell;
}


위 코드중에 dequeueReusableCellWithIdentifier 라는 함수가 있는데,
Identifier 를 지정해주고, xib 파일에서 Identifier 도 지정해주었는데,
디버그를 걸어보면 cell 이 계속 nil 이 되면서 xib 파일을 계속 불러온다.
아무리 구글링해보고, 예제 코드 따라해보아도 안됨 ㅠㅠ.

할수없이 storyboard 에서 uitableview 에 customcell 을 드래그 해서 넣어주고, Identifier 를 지정해주니 
cell 재사용이 됨.




시간이 소요되거나 http 통신이 이루어질 경우 메인스레드가 해당 작업을 하는중이어서 앱이 먹통이 됩니다.

이에 쓰레드(NSThread)로 처리를 해야 하는데,

쓰레드에서 메인쓰레드를 호출하려고 하니 에러가 납니다.


- (void) indicator:(BOOL) chk {

    if (chk == TRUE) [ActivityIndicatorView startAnimating];

    else [ActivityIndicatorView stopAnimating];

}


- (void) subThread {

[self performSelectorOnMainThread:@selector(indicator:) withObject:[NSNumber numberWithBool:TRUE] waitUntilDone:YES];

}


이렇게 적용하였는데, 아래와 같은 에러가 나는 것이다.

performSelectorOnMainThread implicit conversion of 'int' to 'id' is disallowed with arc

열심히 구글링한 결과 (사실 조금만 했음)..

코드를 아래처럼 바꾸라고 하였다.

시킨대로 했더니 성공.


- (void) indicator:(NSNumber *) chk {

    BOOL value = [chk boolValue];

    if (value == TRUE) [ActivityIndicatorView startAnimating];

    else [ActivityIndicatorView stopAnimating];

}

- (void) subThread {

[self performSelectorOnMainThread:@selector(indicator:) withObject:[NSNumber numberWithBool:TRUE] waitUntilDone:YES];

}


+ Recent posts

티스토리 툴바