문제

나는 현재 쓰고 있어요 아이폰 응용 프로그램을 사용하여 핵심 데이터는 EXC_BAD_ACCESS 중 오류가[managedObjectContext 저장:&&러]코드 라인입니다.이 충돌이 발생한 후에 내가 수정 특정한 필드가 있습니다.더 구체적으로 엔터티 내에는 두 개의 문자열 분야(약 10 분야),그들의 값을 반환 모달 보기 컨트롤러(처럼 텍스트 편집기).충돌도 발생 후에 이러한 분야 편집,처음에는 내가 값을 넣어서 그것을 잘 작동합니다.

이 있는 문자열 형식으로 생성자와 문자열에 있었기 때문이에 복사하려고 구조...가 확실하지 않으면 자동적으로 일어나는?어쩌면 생각지/출시 메시지에서 이 문자들(그 두 사람은에서 모달 보기 컨트롤러),들에 출시 해고의 모달 보기 컨트롤러 또는 무언가이다.을 추측하지 않기 때문에 비록 그것은 여전히 작동하지 않습니다.

여기에는 코드 부분은 충돌:

[편집]

        - (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:    (NSInteger)buttonIndex
      switch(buttonIndex) {
              case 0: {
                if(message == nil) {
                  message = [NSEntityDescription insertNewObjectForEntityForName:@"MailMessage" inManagedObjectContext:self.managedObjectContext];
                }
                message.toString = txtTo.text;
                message.fromString = txtFrom.text;
                message.subjectString = txtSubject.text;
                message.backgroundColor = [NSNumber numberWithInt:[bgColor intValue]];
                message.textArray = [NSString stringWithFormat:@"%@", stringTextArray];
                message.htmlString = [NSString stringWithFormat:@"%@", stringHTML];
                message.timeStamp = [NSDate date];
                message.statusCode = [NSNumber numberWithInt:0];
                NSError *error = nil;
                if (![message.managedObjectContext save:&error]) {
                    abort();
                }   
                break;
               }
              case 1: {
             break;
              }
      }
      if(buttonIndex != modalView.cancelButtonIndex) {
      [webViewBody loadHTMLString:@"<html><head></head><body></body></html>" baseURL:[NSURL URLWithString:@""]];
      [self.navigationController popToRootViewControllerAnimated:YES];
}

}

그리고 여기에 충돌 로그:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000015
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x30011940 objc_msgSend + 20
1   CoreData                        0x367f7d3e -[NSKnownKeysDictionary1 dealloc] + 82
2   CoreData                        0x367f7cda -[NSKnownKeysDictionary1 release] + 34
3   CoreData                        0x3687eec4 -[NSManagedObject(_NSInternalMethods) _setOriginalSnapshot__:] + 40
4   CoreData                        0x36821030 -[NSManagedObjectContext(_NSInternalAdditions) _clearOriginalSnapshotAndInitializeRec:] + 16
5   CoreData                        0x368205f2 -[NSManagedObjectContext(_NSInternalAdditions) _didSaveChanges] + 958
6   CoreData                        0x368133bc -[NSManagedObjectContext save:] + 412
7   Decome                          0x0001fdd6 -[CreateMessageViewController actionSheet:clickedButtonAtIndex:] (CreateMessageViewController.m:163)
8   UIKit                           0x30a6cbd8 -[UIActionSheet(Private) _buttonClicked:] + 256
9   CoreFoundation                  0x30256dd4 -[NSObject performSelector:withObject:withObject:] + 20
10  UIKit                           0x3096e0d0 -[UIApplication sendAction:to:from:forEvent:] + 128
11  UIKit                           0x3096e038 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 32
12  UIKit                           0x3096e000 -[UIControl sendAction:to:forEvent:] + 44
13  UIKit                           0x3096dc58 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 528
14  UIKit                           0x309a6e9c -[UIControl touchesEnded:withEvent:] + 452
15  UIKit                           0x309a60d4 -[UIWindow _sendTouchesForEvent:] + 520
16  UIKit                           0x309a5464 -[UIWindow sendEvent:] + 108
17  UIKit                           0x30936e3c -[UIApplication sendEvent:] + 400

어떤 도움을 평가,감사합니다.

업데이트:또한,더라도 프로그램을 때,나는 그것을 열고 다시는 그것의 데이터를 올바르게 저장됩니다.그래서 EXC_BAD_ACCESS 일어나야 한 후 저장 받은 적어도 충분히 멀리점에서 영구 저장소 나는 생각한다.

면 나는 주석으로 저장 라인의 코드를 실행됩니다.하지만 그렇지 않을 저장한 후에 내가 가까이고 종료합니다.실행하는 경우에 저장 라인에서 나 루트 뷰 컨트롤러 willAppear 기능,그것은 발생 동 EXC_BAD_ACCESS 오류가 있습니다.콘솔에 아무 말도 하지 않은 다른 것보다 EXC_BAD_ACCESS 하지만 프로그램을 얻을:

#0  0x30011940 in objc_msgSend ()
#1  0x367f7d44 in -[NSKnownKeysDictionary1 dealloc] ()
#2  0x367f7ce0 in -[NSKnownKeysDictionary1 release] ()
#3  0x3687eeca in -[NSManagedObject(_NSInternalMethods) _setOriginalSnapshot__:] ()
#4  0x36821036 in -[NSManagedObjectContext(_NSInternalAdditions) _clearOriginalSnapshotAndInitializeRec:] ()
#5  0x368205f8 in -[NSManagedObjectContext(_NSInternalAdditions) _didSaveChanges] ()
#6  0x368133c2 in -[NSManagedObjectContext save:] ()
#7  0x0000314e in -[RootViewController viewWillAppear:] (self=0x11b560, _cmd=0x3014ecac, animated=1 '\001') at /Users/inckbmj/Desktop/iphone/Decome/Classes/RootViewController.m:85

죄송하는 코드 없이 제대로 포맷하기 전에.이 보 컨트롤러가 생성되지 않은 경우 새로운"메시지"그것은 메시지를 전달체에서 얻은 fetchedResultsController 그래서 다음과 같:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    MailMessage *aMessage = (MailMessage *)[fetchedResultsController objectAtIndexPath:indexPath];
    [messageView loadMessage:aMessage viewOnly:NO usingTemplate:NO];
    messageView.managedObjectContext = self.managedObjectContext;
    [self.navigationController pushViewController:messageView animated:YES]; 
}

(처음 설정의 코드에서 MessageViewController.m 파일은 클래스는 messsageView 입니다)

그것은 단지 충돌하면 나는 현재 나 EditorViewController 으로 모달을 보고 그런 다음 반환합니다.도 변경하는 경우 textArray 및 htmlString 라인(이은 것은 모달 view 영향을 미치는):

message.textArray = @"HELLO";
message.htmlString = @"HELLO";

그것은 여전히 충돌합니다.면 댓글을 두 라인 밖으로 그러나 그것은 충돌하지 않습니다.

그래서 그것은 충돌하면 나는 현재 모달보를 편집하려고 하거나 textArray 또는 htmlString 분야의 내 NSOManagedObject...

여기에서 어디 존재하기:

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event {
    if(!viewOnly) {
        UITouch *touch = [touches anyObject];
        CGPoint location = [touch locationInView: txtTo];
    location = [touch locationInView: webViewBody];
        if(CGRectContainsPoint(webViewBody.bounds, location)) {
            [editor loadTextArrayString:stringTextArray];
            [self presentModalViewController:editor animated:YES];
        }
    }
}

고 어디에 내가 해제합니다:

-(void)returnWithTextArray:(NSString *)arrayString HTML:(NSString *)html bgColor:(NSNumber *)numColor {
    [self dismissModalViewControllerAnimated:YES];
    self.stringTextArray = [NSString stringWithFormat:@"%@", arrayString];
    self.stringHTML = [NSString stringWithFormat:@"%@", html];
    self.bgColor = [NSNumber numberWithInt:[numColor intValue]];
    [webViewBody loadHTMLString:self.stringHTML baseURL:[NSURL URLWithString:@""]];
}
도움이 되었습니까?

해결책 2

문제를 해결지 나는 해결 실제 근본 원인입니다.는 오류 제거되었을 때 이것을 추가 라인:

[managedObjectContext setRetainsRegisteredObjects:YES];

을 만들 managedObjectContext.그래서 나는 그것을 함께 할 수 있었을 유지는 계산합니다.나는 인스턴스를 어쩌면 변수를 발표하는 부분적으로 또는 일시적 또는 뭔가를 할 때는 모달 전망은 제시된?모르겠습니다.어떤 경우에,이는 오류 제거 프로그램이 작동됩니다.

다른 팁

당신만을 보장하 액세스를 유지 관리되는 개체에서의 컨텍스트로 변경은 보류 중인을 해당 개체(insert,update,delete).한 빨리 당신이 전화를 저장할 수 있습을 잃을 참조하여 관리되는 개체입니다.

하는 동안 당신은 오류를 설정할 때 setRetainsRegisteredObjects:네,있습을 소개하는 메모리 관리 문제를 설정하고 관리되는 개체의 일생에 따라 평생하고 관리되는 개체의 컨텍스트입니다.당신이 통과하는 컨텍스트 전체에서 이 얻을 수 있다는 오히려 큰이 큰 경우에는 개체는 계층 구조로 구성됩니다.

할 수 있습에서 자세히 알아보십시오 애플 문서 여기: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdMemory.html.

다만 다른 사람을 돕는 동일한 문제이고,강화 Steff 의 반응은 위성의 원인이 오류를 시도하고 있는 출시 NSManagedObject.

본 많은 재미있는 행동으로 CoreData 아이폰에서 해결했다 다시 설정하여 콘텐츠 설정에서 아이폰을 시뮬레이터입니다.

나는 이 시대에 뒤떨어진 사람이 있었는데 같은 문제를 그렇게 생각했을 추가 제 tuppence 는 방법으로 나의 문제를 해결,광산에 의해 발생했을 수동으로 풀어 관리체 내에서 모달 전망,나는 제거 방출을 호출하고 모든 것이 잘 작동:)에 따라 문서를 타지 않을 수동으로 시도 및 릴리스 관리 개체 어쨌든 문맥에 보이는 것은 모든 후입니다.내 경험에 어쨌든,수색을 통해 귀하의 코드를 통해 출시된 값입니다.

설정해야 합니다 FRC 캐시 nil

나는 여타 유사한 문제를 해결되어 있는지 확인하여 객체를 가져,그래서 위의 예제:

if ( message == nil ) {
    message = [NSEntityDescription insertNewObjectForEntityForName:@"MailMessage" inManagedObjectContext:self.managedObjectContext];
} else {
    NSError *error = nil;
    message = (MailMessage *)[managedObjectContext existingObjectWithID:[message objectID] error:&error];
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top