2009-11-29 6 views
5

ViewView를 빌드하고 그려주는 TableView가 있지만보기를 스크롤 할 때 충돌이 발생합니다. 나는 디버거를 통해 실행했고, 클래스 레벨 변수가 어떻게 든 덮어 써 져서 titleForHeaderInSection이 다시 호출 될 때 더 이상 존재하지 않는 것처럼 보입니다. 매우 이상한 것은입니다 나는 코드를 대체하는 경우 :스크롤 할 때 UITableView가 충돌합니다.

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
NSString *sectionTitle = @"Test"; 
return sectionTitle; 
} 
그것은 여전히 ​​충돌

하지만 디버거를 나열하지있는 NSString 당신이 sectionTitle 변수 위에 마우스를 올려이 시간 :와

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
NSString *sectionTitle = [favouritesDataSections objectAtIndex:section]; 
return sectionTitle; 
} 

.

이 내가보기를 만드는 데 사용되는 코드이며, 클래스 레벨의 변수 설정 :

- (void)loadView { 
[super loadView]; 
CGRect tableSize = CGRectMake(0,0,320,460); 
UITableView *favouritesTableView = [[UITableView alloc] initWithFrame:tableSize style:UITableViewStylePlain]; 
favouritesTableView.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight); 
favouritesTableView.dataSource = self; 
favouritesTableView.delegate = self; 
favouritesTableView.rowHeight = 52; 
[self.view addSubview:favouritesTableView]; 
} 

- (void)viewDidLoad { 
[super viewDidLoad]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
// Get the full path of the favourites plist 
NSString *filename = [documentsDirectory stringByAppendingPathComponent:@"Favourites.plist"]; 
// Initialise Dictionary and array 
favouritesDataAll = [[NSMutableDictionary alloc] init]; 
favouritesDataSections = [[NSArray alloc] init]; 

NSDictionary *dict = [[[NSMutableDictionary alloc] initWithContentsOfFile:filename] retain]; 
favouritesDataAll = dict; 
[dict release]; 

favouritesDataSections = [favouritesDataAll allKeys]; 
} 

나는이를 추적하려고 절대적으로 미친 하겠어을 - 지금까지 그렇게 될 것이다 그것에 이일을 보냈다 어떤 도움이든지 외부에 감사드립니다. 메모리 손상이 여기에 무슨 어떤 종류의 존재처럼

안부

데이브

+0

확인 후 콘솔이 제공 : *** - [UISwipeGestureRecognizer 길이] : 인식 할 수없는 선택기 예를 0x43325d0 –

+0

로 전송 또한 : 캐치되지 않은 예외 'NSRangeException'로 인해 앱 종료 중, 이유 : '*** - [NSCFArray objectAtIndex :] : 인덱스 (0) 초과 (0)' –

+0

괜찮습니다. 그 유지는 제가 생각하기에 붉은 청어였습니다. titleForHeaderInSection을 @ "Test"로 대체했기 때문에 그것은 잠시 동안 작동했습니다. 콘솔 오류 : *** 캐치되지 않은 예외 'NSRangeException'으로 인해 응용 프로그램 종료 중, 이유 : '*** - [NSCFArray objectAtIndex :] : 인덱스 (57744) 초과 (2)' –

답변

12

는 ...에

favouritesDataSections = [favouritesDataAll allKeys]; 

변경 :

favouritesDataSections = [[favouritesDataAll allKeys] retain]; 

그리고 모든 작업이 나타납니다. 이것으로부터 필자는 섹션 제목을 저장하기 위해 사용하고있는 배열이 임의의 지점에서 자동 렌더링 된 데이터를 가리키고 있음을 추측 할 수 있습니다. 이는 겉보기에 이상한 곳에서 바코드를 사용하는 이유입니다.

나는 아직 코딩의 "시행 착오"단계에 있지만 내가하고있는 것을 완전히 이해하지 못한다는 것을 인정한다. (나는이 책을 읽는 것이 틀림 없음). 추가 이해에 대한 생각/의견 링크가 있거나 내 모든 이해를 돕기 위해 이러한 모든 기능이 작동하는 방식 (예 : 보유 기간 및 이유 등)에 대한 게시물이 있다면 유용 할 것입니다.

다시 한번 감사, 데이브

+0

Dave, Apple의 설명서에서 메모리 관리 규칙을 읽으십시오. 이것은 약간의 독서를 처음 해보았다면 당신이하지 못했을지도 모르는 초등학교 실수입니다. – NSResponder

+0

매우 유용합니다. 나는 비슷한 문제가 있었다. 감사!!!! – saimonx

0

는 소리.

나는 [super ...]에 대한 호출은 해당 메소드의 다른 코드 뒤에 있어야한다는 것을 알았습니다.

섹션을 하나만 포함하도록 테이블 뷰를 조정하면 어떻게됩니까? 그것을 고정 OK

+0

안녕하세요. 빠른 답변. 불행히도 슈퍼를 끝까지 넣으면 충돌이 발생합니다 (즉, TableView가 그려지지 않습니다). 또한 섹션 수를 수동으로 1로 설정하고 섹션의 행 수를 1로, 섹션 제목을 @ "테스트"로 설정하려고했습니다. 스크롤에서 여전히 충돌합니다. –

4
나는이 문제를 방지하기 위해 @property 세터를 사용하는 것이 좋습니다

이 배열은 당신이 수동라고 그래서, 오토 릴리즈 그것을 유지되어,이 문제를 해결하지만, 간단한 수정 될 것 사용이이 @property 의해 자동화

self.favoritesDataSection 수단이 설정되면 호출 보관 유지하고, 그것이 존재하지 않거나 다른 객체로 설정 될 때 해제 (유지).나는 그것이 약 3 4 회 작동 jQuery과 라인의 끝에서 유지하고에 넣어 경우

관련 문제