코어 데이터 및 관계에 문제가 하나 있습니다. 이것은 잠시 동안 솔루션없이 나를 지켜 주었고 동시에 찾기가 쉽기 때문에 문제를 재현 할 수있는 작은 샘플 애플리케이션을 만들었습니다. XCode에서 "저장소에 코어 데이터 사용"을 선택하여 베어 본 윈도우 기반 응용 프로그램을 만들었습니다. 이 응용 프로그램을 Core-Data-Relationship에 대해 "CDR"이라고했습니다. 그런 다음 CDRViewController라는 UIViewController의 하위 클래스를 추가했습니다. 내가 보통하는 것처럼. CDR_ViewController.h에서 첫째 : CDR_ViewController.m에서 다음응용 프로그램을 중지 한 후 코어 데이터 재배치가 작동하지 않습니다.
#import <UIKit/UIKit.h>
#import "AppDelegate_Shared.h"
@interface CDR_ViewController : UIViewController {
UILabel *cdrLabel;
NSManagedObject *currentItem;
}
@property (nonatomic, retain) IBOutlet UILabel *cdrLabel;
-(IBAction) handleButtonClick:(id)sender;
@end
의 viewDidLoad 방법은 다음과 같다 :
- (void)viewDidLoad {
[super viewDidLoad];
NSFetchRequest *request;
NSError *error;
AppDelegate_Shared *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
request=[[NSFetchRequest alloc] init];
[request setEntity: [NSEntityDescription entityForName:@"CDR_Entity" inManagedObjectContext:context]];
error=nil;
NSUInteger count = [context countForFetchRequest:request error:&error];
[request release];
if (count!=0) {
request=[[NSFetchRequest alloc] init];
[request setEntity: [NSEntityDescription entityForName:@"CDR_Entity" inManagedObjectContext:context]];
error=nil;
NSArray *objects=[context executeFetchRequest:request error:&error];
NSLog(@"Error:%@",error);
[request release];
currentItem=[objects objectAtIndex:0];
return;
}
NSManagedObject *newItemOne,*newItemTwo,*newItemThree;
request=[[NSFetchRequest alloc] init];
[request setEntity: [NSEntityDescription entityForName:@"CDR_Entity" inManagedObjectContext:context]];
newItemOne=[NSEntityDescription insertNewObjectForEntityForName:@"CDR_Entity" inManagedObjectContext:context];
newItemTwo=[NSEntityDescription insertNewObjectForEntityForName:@"CDR_Entity" inManagedObjectContext:context];
newItemThree=[NSEntityDescription insertNewObjectForEntityForName:@"CDR_Entity" inManagedObjectContext:context];
[newItemOne setValue:[NSNumber numberWithInteger:1] forKey:@"Value"];
[newItemTwo setValue:[NSNumber numberWithInteger:2] forKey:@"Value"];
[newItemThree setValue:[NSNumber numberWithInteger:3] forKey:@"Value"];
[newItemOne setValue:newItemThree forKey:@"Previous"];
[newItemOne setValue:newItemTwo forKey:@"Next"];
[newItemTwo setValue:newItemOne forKey:@"Previous"];
[newItemTwo setValue:newItemThree forKey:@"Next"];
[newItemThree setValue:newItemTwo forKey:@"Previous"];
[newItemThree setValue:newItemOne forKey:@"Next"];
error=nil;
[context save:&error];
[request release];
currentItem=newItemOne;
}
그리고 따를 수있는 viewWillAppear 방법 는 여기에 추가 관련 코드 :
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
cdrLabel.text=[NSString stringWithFormat:@"%@",[currentItem valueForKey:@"Value"]];
}
마지막으로 handleButtonClick 방법은 다음과 같다 :
-(IBAction) handleButtonClick:(id)sender
{
if (((UIButton*)sender).tag==101) {// Previous item.
currentItem=[currentItem valueForKey:@"Previous"];
} else /*(((UIButton*)sender).tag==102)*/ {// Next item.
currentItem=[currentItem valueForKey:@"Next"];
}
cdrLabel.text=[NSString stringWithFormat:@"%@",[currentItem valueForKey:@"Value"]];
}
CDR_ViewController.xib에는 하나의 레이블과 두 개의 버튼이 있습니다.
이 코드는 처음에는 제대로 작동합니다. 즉, 앱을 컴파일하고 iPhone 시뮬레이터의 내용을 재설정 한 직후입니다. 그런 다음 라벨의 내용을 순환시킬 수 있습니다 : 1,2,3,1,2,3,1,2,3 --- 등 ... 버튼으로 뒤로 가십시오. Command-Q를 사용하여 응용 프로그램을 종료하는 즉시. 나는 다시 시작 할 때의 충돌 :
currentItem=[currentItem valueForKey:@"Previous"];
나 :
currentItem=[currentItem valueForKey:@"Next"];
을 handleButtonClick 방법 내부. 그리고 iPod touch에 앱을 넣을 때도 마찬가지입니다.
누구든지 내 행동을 설명 할 수있는 코드를 볼 수 있습니까?
어떻게 답변을 수락합니까? 나는 그들 중 상당수를 실제로 받아들이고 싶다. 내가 언급 한 링크를 살펴 보겠습니다. – Michel