获取后核心数据/ NSTextView插座未更新(OS X)

时间:2013-12-04 23:08:58

标签: sql macos cocoa core-data nstextview

我是新手,所以如果我有点“密集”,我道歉。

我正在编写核心数据应用程序。在我的.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数据。

我该如何解决这个问题?我的项目处于停滞状态......: - (

0 个答案:

没有答案