2013-03-08 2 views
0

안녕하세요, 저는 테이블 뷰와 컴파일러에 대해 iTunes9 CS193P의 9th 레슨을보고 있습니다. NSInternalInconsistencyException ', 이유 :': 변경 가능한 메소드가 불변 오브젝트로 전송되었습니다. '테이블 뷰 컨트롤러 cs193p 아이튠즈 9 레슨

내 시뮬레이터는 내가

#define FAVORITE_KEY @"GraphViewController.Favorite" 
- (IBAction)addFavorite:(id)sender 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSMutableArray *favorites = [[defaults objectForKey:FAVORITE_KEY] mutableCopy]; 
    if (!favorites) favorites = [NSMutableArray array]; 
    [favorites addObject:self.program]; 
    // NSLog(@"contenuto favorites %@",favorites); 
    [defaults setObject:favorites forKey:FAVORITE_KEY]; 
    [defaults synchronize]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"GraphTableView"]) { 
     NSArray *program = [[NSUserDefaults standardUserDefaults]objectForKey:FAVORITE_KEY]; 
     [segue.destinationViewController setPrograms:program]; 
    } 
} 
GraphViewController.m라는 클래스가

아이 패드 6.1

(setPrograms 내가 CalculatorTVC.m라는 내 tableviewcontroller에 보낼 수있는 데이터가 세터입니다)

CalculatorTVC.m

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.programs count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"cellTable"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    // Configure the cell... 
    id program = [self.programs objectAtIndex:indexPath.row]; 

    cell.textLabel.text = [@"y = " stringByAppendingString:[CalculatorBrain descriptionProgram:program]]; 
    NSLog(@"contenuto di program %@",program); 

    return cell; 
} 

(프로그램라는 클래스 내가로부터 데이터를 넣어 공용 속성이다 GraphViewController.m)

내 스토리 보드에는 분할보기가 있습니다 ... MasterViewController에서 팝업보기 스타일 컨트롤러의 테이블보기 컨트롤러 (CalculatorTVC.m)와 연결된 막대 단추 항목이있는 도구 모음이 GraphTableView이고 원형 사각형이 있습니다 addFavorite 버튼이 여기에 설명되어 있습니다.

오류 때문에 캐치되지 않는 예외 'NSInternalInconsistencyException'응용 프로그램 종료, 이유 *가있다 : - (0x1ca1012 0x10dee7e 0x1ca0deb : * 우선 투사 호출 스택 '[__ NSCFArray removeObjectAtIndex는 :] 방법 불변 객체 전송 돌연변이' 0x1d21c4f 0x1d21911 0x4a5b 0x8f65 0xdd8fb 0xdd9cf 0xc61bb 0xd6b4b 0x732dd 0x10f26b0 0x229dfc0 0x229233c 0x22a0238 0x6b6e3 0x4f1476 0x870989a 0x4f2555 0x489ef9 ​​0x46ab99 0x46ac14 0x10f2705 0x262c0 0x262a64 0x10f2705 0x262c0 0x26258 0xe7021 0xe757f 0xe66e8 0x55cef 0x55f02 0x33d4a 0x25698 0x1bfcdf9 0x1bfcad0 0x1c16bf5 0x1c16962 0x1c47bb6 0x1c46f44 0x1c46e1b 0x1bfb7e3 0x1bfb668 0x22ffc 0x24bd 0x23e5) 의 libC++ abi.dylib : 예외를 던지기 위해 종료 됨 (lldb)

라인에서 관련이 충돌


내가 찾을 확인

....

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"cellTable"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    // Configure the cell... 
    id program = [self.programs objectAtIndex:indexPath.row]; 

    cell.textLabel.text = [@"y = " stringByAppendingString:[CalculatorBrain descriptionProgram:program]]; 
    NSLog(@"contenuto di program %@",program); 

    return cell; 
} 

충돌 양해 나에게

감사를 도와주세요

cell.textLabel.text = [@ "y ="stringByAppendingString : [Calc ulatorBrain descriptionProgram : 프로그램]];

내가 출력 NSLOG 결과에서 볼이 라인 전에 NSLOG을 넣어 ...하지만이 후 NSLOG를 넣으면 내가 여기

+0

@ JasonC.Howlin, 틀렸어. [NSMutableArray array]는 가변 배열을 반환한다. 그것은 올바르게 덮어 씁니다 – vikingosegundo

+0

사실 나는 NSMutableArray * 즐겨 찾기 = [[defaults objectForKey : FAVORITE_KEY] mutableCopy]를 사용하여 문제를 이해하지 못합니다. 변경할 수 있습니다 .imim – walle

+0

어떤 코드 라인이 원인인지 확인하기 위해 예외 중단 점이 있습니까 예외? –

답변

0
NSArray *program = [[NSUserDefaults standardUserDefaults]objectForKey:FAVORITE_KEY]; 
[segue.destinationViewController setPrograms:program]; 

당신은을 전달하는 출력에 아무것도 표시되지 않는 경우 목적지 뷰 컨트롤러에 불변의 배열. 가변 배열을 기대하고 수정하려고 시도하면 해당 충돌이 발생합니다. 여기에도 mutableCopy가 필요합니다.

속성이 일 경우이 가변 배열 일 경우 컴파일러 경고가 표시됩니다. 이것들을 무시하지 마십시오!

덧글이 아닌 제거시 충돌이 발생하므로 질문에 올바른 코드가 포함되지 않았습니다. 예외 중단 점을 사용하면 충돌하는 행을 찾을 수 있습니다.

+0

ok 어디서 발견 되나요? - (UITableViewCell *) tableView : (UITableView *) tableView cellForRowAtIndexPath : (NSIndexPath *) indexPath { static NSString * CellIdentifier = @ "cellTable"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier : CellIdentifier forIndexPath : indexPath]; // 셀을 구성하십시오 ... id 프로그램 = [self.programs objectAtIndex : indexPath.row]; cell.textLabel.text = [@ "y ="stringByAppendingString : [CalculatorBrain descriptionProgram : program]]]; NSLog (@ "contenuto di program % @"프로그램); return cell; } – walle