나는 여기서 가장 이상한 오류를 겪고 있으며, 누군가가 그것을 통해 나를 도울 수 있기를 바랍니다. 나는 기존 앱을 ARC로 변환하는 (느리고 아픈) 과정에있다. 내 응용 프로그램은 FMDB를 사용하여 db와 대화하는 기본 서적 리더 앱입니다. 전환은 잘되었지만 지금은 장 이름 tableView를로드해야하는 곳에서 충돌하고 있습니다. 나는 좋은 지금까지NSMutableArray의 객체가 왜 아무 이유없이 값을 잃는 이유는 무엇입니까?
NSMutableArray * volumes;
}
@property (nonatomic, strong) NSMutableArray * volumes;
암 : 내 헤더 파일에서
나는 내 사용자 지정 볼륨의 모든 개체를 보유하고이 배열을? 내 변수를 합성하는 .m 파일에서 다음의 viewDidLoad에서 나는 DB 호출의 결과로 배열을 채우기 :
FMDatabase * database = [FMDatabase databaseWithName:name];
FMResultSet * set = [database executeQuery:@"SELECT * FROM book_volumes"];
volumes = [[NSMutableArray alloc] init];
while ([set next]) {
Volume * v = [[Volume alloc] initWithResultSet:set];
[volumes addObject:v];
}
이의 결과는 내가 7 개체로 가득 배열을 가지고있다. 디버거 창에서 배열 내부의 값을 살펴보면 모두 내부에 있으며 모든 사용자 정의 객체에는 해당 속성이 모두 있습니다.
재생을 클릭하면 numberOfSectionsInTableView :로 이동하고이 방법에서 처음으로 배열의 값을 보면 모든 값이 그대로 유지됩니다. 그러나 히트시에는 같은 방법으로 다시 이동합니다. numberOfSectionsInTableView :. 그게 맞습니까? numberOfSectionsInTableView를 호출하려면 : 두 번? 이 두 번째 호출 중에 배열의 값을 보면 여전히 7 개의 객체가 있지만 그 중 아무 값도 액세스 할 수 없습니다. 그들에게는 주소가 있지만, 시도 할 수는 있지만 사용할 수는 없습니다.
cellForRowAtIndexPath :로 이동하면 특히 문제가됩니다. 볼륨 배열의 오브젝트에있는 데이터에 액세스 할 수 없기 때문에 충돌합니다.
나는 ARC에 아주 익숙하다. 그래서 나는 뭔가를 놓치고있다. 그러나 ARC가 배열의 객체를 너무 일찍 공개 할 수있는 기회가 있는가?
나는 여기에서 무슨 일이 벌어 질지 모른다. 나는 db에서 배열로 데이터를 성공적으로 가져 오는 중입니다. 그리고 나서 어떻게 든 tableView를 채우기 전에 사라집니다.
무엇이 누락 되었습니까?
감사합니다.
UPDATE :
그래서 여전히 작동하지 않습니다, 그것은 여전히 나를 미치게된다. 나는 내가 numberOfRowsInSection에 갈 때의 스크린 샷을 첨부 할 거라고 생각 : 방법, 모든 것이 폭파됩니다 :UPDATE 다시 : 그것은 결국 무엇 때문에
좋아이었다되는 ARC 변환 도구는 내 사용자 정의 객체의 속성을 __unsafe_unretained
으로 변경했습니다. 내가 그걸 더 일찍 잡았 으면 좋았을 텐데. 나는 그것을 꺼내 문자열에 속성을 변경하고 오류가 사라졌습니다.
이 문제를 검토해 주셔서 감사합니다.
self.volumes = [[NSMutableArray alloc] init];
대신 좋아
volumes = [[NSMutableArray alloc] init];
문제가 배열이 아닌 볼륨 개체에있는 것처럼 보입니다. 그 중 일부 세부 사항을 포함 할 수 있습니까? – jrturton
Volume 클래스의 initWithResultSet에있는 내용과 Volume 인터페이스가 선언 된 방법을 보여줍니다. 당신의 문제는 거기에있을 가능성이 높습니다 –
@jrturton 나는 당신이 그것을 들여다보기 위해 언급 한 바로 그 문제라고 생각했습니다. 나는 무슨 일이 있었는지 보여주기 위해 내 글을 업데이트했다. 좀 더 많은 질문에 대한 답변을 자유롭게 해주십시오 :) – Lizza