문제

나는 Objective-C를 처음 접했고 테이블에 새 행을 추가하는 데 많은 어려움이 있습니다. 작동한다고 가정하는 방식은 앱이 알림을로드 할 때 사용자에게 원하는지 묻거나 새 구성을 시작하거나 저장된 구성을로드하거나 마지막 구성을 재개하는 것입니다. 이제 새 구성을 시작하면 새 구성을 시작하면 새 이름을 입력하라는 요청을 받고 탭하면 앱이 테이블에 새 구성을 저장합니다.

지금은 앱이 테이블에 하나의 구성 만 저장하도록 할 수 있지만 사용자가 다른 새로운 구성을 만들려고하면 앱이 중단됩니다. 내 코드는 다음과 같습니다.

- (IBAction) testToAddToList
{
    nameOfConfig = @"Test Name"; //this just bypasses the user from having to enter a name

    NSMutableArray *array = [[NSMutableArray alloc] init];

    [array insertObject:nameOfConfig atIndex:configListDataIndex];

    self.configListData = array;

    [array release];

    configListDataIndex ++;
}

나는이 것들에 대해 많이 읽었지만 이것은 너무 힘들어야하는 것처럼 보이지 않습니다. 또한 주요 문제는 "배열"에 하나의 색인 만 있고 사용자가 다른 것을 추가하려고 할 때 앱 충돌을 일으킨다는 것입니다.

누군가 나를 도와주고 내가 무엇을 잘못하고 있는지, 어떻게 제대로 할 수 있는지 말해 줄 수 있습니까? 제발! ... 아니면 올바른 방향으로 나를 가리겠습니까?

도움이 되었습니까?

해결책

Woofy가 언급 한 바와 같이 문제는 이전에 생성 된 배열을 잡는 대신 매번 새로운 배열을 만들고 있다는 것입니다. 따라서 배열에 처음 추가하면 기본적으로 다음을 수행합니다.

[array insertObject:nameOfConfig AtIndex:0];

그러나 다음에, 당신은 새로운 (빈) 배열을 만들고 configlistDatainDex 변수는 이제 1이므로

[array insertObject:nameOfConfig atIndex:1];

그리고 1은 빈 배열의 경계를 벗어 났기 때문에 충돌. 이를 해결하려면 다음과 같은 작업을 수행 할 수 있습니다.

NSMutableArray *array;
if (self.configListData != nil)  // I know, unnecessary, but I like being explicit with my nil checks.
    array = self.configListData;
else
    array = [NSMutableArray array];

그런 다음 함수의 끝에서 해제하지 마십시오 (ConfigListData의 Getter가 자동 엘리트 또는 할당되었다고 가정함에 따라).

이렇게하면 Crasher가 수정됩니다. 또한 언제든지 전화 할 수 있습니다

[array addObject:nameOfConfig];

배열 끝에 객체를 자동으로 추가하므로 인덱스 변수를 제거 할 수 있습니다. 그러나이 두 번째 부분을 변경하면 버그를 숨기고 새 구성이 이전 구성을 대체한다는 것이 더 신비하게 만듭니다.

다른 팁

nsmutablearray의 -addobject : insertobject 대신 메소드를 사용하는 것이 훨씬 간단하지 않습니까? 추가 변수 (configlistdataindex)를 사용하는 이유는 무엇입니까?

[array addObject:nameOfConfig];
self.configListData = array;
[array release];

그리고 그게 다야.

그리고 나는 그것이 왜 충돌하는지 알고 있다고 생각합니다 ... 당신은 항상 새로운 배열 객체를 만들고, 항상 새로운 빈 배열의 다른 위치에 "nameofconfig"를 삽입 할 때마다. 그로 인해 configlistData는 항상 하나의 객체 만 갖습니다. configlistData를 직접 편집하는 것이 훨씬 나아지지 않습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top