我是新手,所以如果我有点“密集”,我道歉。
我正在编写核心数据应用程序。在我的.xib上,我有几个出口,包括文本字段,日期选择器和使用NSTextContainers的“文本视图”。这些设置正确。
我的应用程序是各种各样的临时数据库。当用户保存记录,清除字段,并立即尝试重新加载记录时,除NSTextView外,所有字段都会填充。现在,如果我完全关闭应用程序,重新启动它,然后检索记录,NSTextContainers(NSTextView)出口正常运行并显示正确的数据。只有当您立即尝试加载记录时才会出现问题并且插座显示为空白。我设置了一些NSLog语句来查看数据是否被检索,并且看到fetch没有获取NSTextView对象数据。它回来了。
以下是一些代码段。我很感激任何帮助,因为这让我发疯了。
@property (weak) IBOutlet NSTextField *clientnameField;
@property (unsafe_unretained) IBOutlet NSTextView *clientaddressField;
@property (weak) IBOutlet NSTextField *clientphoneField;
@property (unsafe_unretained) IBOutlet NSTextView *clientnotesField;
- (IBAction)saveButton:(id)sender {
AppDelegate *appDelegate = (AppDelegate*) [[NSApplication sharedApplication]delegate];
NSEntityDescription *entity = [NSEntityDescription insertNewObjectForEntityForName:@"Team" inManagedObjectContext:appDelegate.managedObjectContext];
[entity setValue:self.clientnameField.stringValue forKey:@"clientname"];
[entity setValue:self.clientaddressField.string forKey:@"clientaddress"];
[entity setValue:self.clientphoneField.stringValue forKey:@"clientphone"];
[entity setValue:self.clientnotesField.string forKey:@"clientnotes"];
NSError *error;
BOOL isSaved = [appDelegate.managedObjectContext save:&error];
}
//Fetching the Data Back
- (void)alertDidSearch:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
if (returnCode == NSAlertSecondButtonReturn) {
AppDelegate *appDelegate = (AppDelegate*) [[NSApplication sharedApplication]delegate];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Team" inManagedObjectContext:appDelegate.managedObjectContext];
NSFetchRequest *fetchRqst = [[NSFetchRequest alloc] init];
[fetchRqst setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(clientname == %@)", self.clientnameField.stringValue];
[fetchRqst setPredicate:predicate];
NSMutableArray *array = [[appDelegate.managedObjectContext executeFetchRequest:fetchRqst error:nil]mutableCopy];
if ([array count] == 0) {
NSAlert *notFoundAlert;
notFoundAlert = [[NSAlert alloc] init];
[notFoundAlert addButtonWithTitle:@"OK"];
[notFoundAlert setMessageText:@"RECORD NOT FOUND!!"];
[notFoundAlert setInformativeText:@"The client was not found. Check the name and spelling and try again."];
[notFoundAlert setAlertStyle:NSWarningAlertStyle];
[notFoundAlert beginSheetModalForWindow:[self window] modalDelegate:self didEndSelector:@selector(alertDidEndOK:returnCode:contextInfo:) contextInfo:nil];
} else {
for (NSManagedObject *obj in array)
{
self.clientnameField.stringValue = [obj valueForKey:@"clientname"];
self.clientaddressField.string = [obj valueForKey:@"clientaddress"];
self.clientphoneField.stringValue = [obj valueForKey:@"clientphone"];
self.clientnotesField.string = [obj valueForKey:@"clientnotes"];
}
}
}
未检索客户端地址字段和客户端备注字段(出口)。
我不确定我做错了什么。同样,数据被保存,因为当我立即检索记录时,每个字段都会填充除客户端注释和clientaddress字段之外的NSTextView出口。那些在我退出之前不显示数据,重新启动程序然后检索记录。如果我不得不猜测,并且我在猜测,我向你保证,似乎持久性存储没有针对任何.string更新。实际上,如果我在退出程序之前添加多个记录并尝试检索多个记录,它们都会出现相同的问题。关闭程序,重新启动它,然后重新获取记录,这一切都很好。
非常感谢您的帮助。我很难过。如果这是一个愚蠢的问题,我再次道歉......请怜悯我吧!并且为冗长的解释道歉,但我希望尽可能清楚。
编辑:
在程序终止文件关闭之前,似乎没有写入NSTextView数据。
我该如何解决这个问题?我的项目处于停滞状态......: - (