1

나는 여기서 가장 이상한 오류를 겪고 있으며, 누군가가 그것을 통해 나를 도울 수 있기를 바랍니다. 나는 기존 앱을 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에 갈 때의 스크린 샷을 첨부 할 거라고 생각 : 방법, 모든 것이 폭파됩니다 :

It doesn't make sense!

UPDATE 다시 : 그것은 결국 무엇 때문에

좋아이었다되는 ARC 변환 도구는 내 사용자 정의 객체의 속성을 __unsafe_unretained으로 변경했습니다. 내가 그걸 더 일찍 잡았 으면 좋았을 텐데. 나는 그것을 꺼내 문자열에 속성을 변경하고 오류가 사라졌습니다.

이 문제를 검토해 주셔서 감사합니다.

self.volumes = [[NSMutableArray alloc] init]; 

대신 좋아

volumes = [[NSMutableArray alloc] init]; 
+2

문제가 배열이 아닌 볼륨 개체에있는 것처럼 보입니다. 그 중 일부 세부 사항을 포함 할 수 있습니까? – jrturton

+0

Volume 클래스의 initWithResultSet에있는 내용과 Volume 인터페이스가 선언 된 방법을 보여줍니다. 당신의 문제는 거기에있을 가능성이 높습니다 –

+0

@jrturton 나는 당신이 그것을 들여다보기 위해 언급 한 바로 그 문제라고 생각했습니다. 나는 무슨 일이 있었는지 보여주기 위해 내 글을 업데이트했다. 좀 더 많은 질문에 대한 답변을 자유롭게 해주십시오 :) – Lizza

답변

3

의 사용

+1

문제에 대한 해결책으로 자신의 대답을 받아들이는 것을 두려워하지 마십시오. –

-1

시도는 그래서 었죠 무엇 ARC 변환 도구 내 사용자 정의 개체의 속성이 앞에 __unsafe_unretained 것으로 변경이었다. 내가 그걸 더 일찍 잡았 으면 좋았을 텐데. 나는 그것을 꺼내서 재산을 강하게 바꾸었고 그 잘못은 사라졌습니다.

이 문제를 검토해 주셔서 감사합니다.

+0

ARC에서 합성 세터의 경우에는 차이점이 없습니다. 인스턴스 변수는 기본적으로 '강'합니다. – joerick

+0

그냥 시도했지만 여전히 운이 없네요. 데이터를 얻을 수있는 유일한 방법은 농담 인 tableView의 모든 대리자/데이터 소스 메서드에서 db에 대한 호출을 만드는 것입니다. – Lizza