NSJSONSerialization
클래스의 사전을 생성하는 메소드가 있습니다. 그런 다음 json을 열거하고 각 인스턴스에 대해 상태를 저장하는 객체를 만듭니다.루프에서 객체 생성하기 상태를 유지하지 않는 ivar/인스턴스 변수
- (void)fetchedData:(NSData *)responseData {
NSError* error;
NSDictionary *json = [NSJSONSerialization
JSONObjectWithData:responseData
options:kNilOptions
error:&error];
NSArray *moviesJson = [json objectForKey:@"movies"];
for(NSDictionary *element in moviesJson)
{
RABMovie *myMovie = [[RABMovie alloc] initWithJson:element];
// RABMovie *myMovie = [RABMovie new];
// myMovie.json = element;
[_myMovieNames addObject: myMovie];
myMovie = nil;
}
[self.movieTableView reloadData];
}
문제 :이 작업을 수행 할 때이 할당 자에 element
를 전달하여 내 객체를 생성 할 그러나, 내 UITTableView
행 모두가 같은 동영상 데이터가 포함되어 있습니다. 항상 마지막 항목 인입니다. 제가 단 하나의 메모리 주소로 작업하고 있다고 믿게하고, 마지막 업데이트가 전체 컬렉션에 영향을 미칩니다.
alloc 매개 변수 대신 json
을 속성으로 사용하는 코드의 주석을 제거하면 더 이상 문제가 발생하지 않으며 모든 것이 잘 작동합니다. 또한 element
의 딥 복사본을 통해 완전히 새로운 NSDictionary
을 만들려고 시도했습니다.
누군가 이런 일이 일어나는 이유를 알고 있습니까? BTW, 나는 ARC를 사용하고있다. 시간 내 주셔서 감사합니다.
편집 : 추가 코드가 추가되었습니다. 저는 movieName
속성을 사용하여 ivar 사용 방법을 설명했습니다 _json
.
@implementation RABMovie
NSDictionary *_json;
- (id) initWithJson: (NSDictionary*) jsonAsDictionary
{
if (self = [super init])
{
_json = jsonAsDictionary;
}
return self;
}
- (NSString*) movieName
{
return [_json objectForKey:@"title"];
}
RABMovie 초기화 프로그램 (initWithJson)의 코드를 게시 할 수 있습니까? – aleroot
예, 더 많은 코드를 게시해야합니다. 게시 한 코드에 아무런 문제가 없습니다. 작동해야합니다 (moviesJson에 생각하는 내용이 포함되어 있다고 가정하면 for 루프에 요소를 기록해야합니다). – rdelmar