NSManagedObjectContext 帮助

Posted

技术标签:

【中文标题】NSManagedObjectContext 帮助【英文标题】:NSManagedObjectContext Help 【发布时间】:2011-04-24 02:14:03 【问题描述】:

我只是在尝试和学习。我有一个带有 1 个文本框、标签和保存按钮的简单视图。按下按钮时,我想将文本框中的数据保存到核心数据并更新标签。谢谢

在 DailyClinicalPerformanceRecord.m 中

- (IBAction)btnSave:(id)sender 

DailyClinicalPerformanceRecord* delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext* managedObjectContext = delegate.managedObjectContext;
NSManagedObject* newForm;


newForm = [NSEntityDescription insertNewObjectForEntityForName:@"DCPR" inManagedObjectContext:managedObjectContext];
[newForm setValue:txtIncidentNum.text forKey:@"indidentNum"];

txtIncidentNum.text = @"";

NSError *error;
[managedObjectContext save:&error];
status.text = @"Form Saved";


在 DailyClinicalPerformanceRecord.h 中

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>


@interface DailyClinicalPerformanceRecord : UIViewController<UIApplicationDelegate>

UITextField *txtIncidentNum;
UILabel *status;


@property (nonatomic, retain) IBOutlet UITextField *txtIncidentNum;
@property (nonatomic, retain) IBOutlet UILabel *status;

- (IBAction)btnSave:(id)sender;
- (IBAction)btnBack:(id)sender;
- (void)dismissKeyboard;


@end

我收到错误:/Users/specked/Programs/EMTDocs/EMTDocs/DailyClinicalPerformanceRecord.m:67: error: request for member 'managedObjectContext' in something not a structure or union

和警告 /Users/specked/Programs/EMTDocs/EMTDocs/DailyClinicalPerformanceRecord.m:66: warning: type 'id &lt;UIApplicationDelegate&gt;' does not conform to the 'NSCoding' protocol

【问题讨论】:

【参考方案1】:

很难对您的问题给出明确的答案,因为您没有提供有关问题所在的任何详细信息。但这里有几件事需要检查:

检查您是否已连接到 txtIncidentNum 和 status 对象以及 Interface Builder 中的 btnSave 方法 确保正在调用 btnSave(NSLog 很方便) 确保 managedObjectContext 不是 nil

另外,这句话有点可疑:

DailyClinicalPerformanceRecord* delegate = [[UIApplication sharedApplication] delegate];

可疑之处在于它位于 DailyClinicalPerformanceRecord.m 中。如果此代码在 DailyClinicalPerformanceRecord.m 中并且 DailyClinicalPerformanceRecord 是您的委托,您可以通过 self 获取 managedObjectContext 而无需跳过这些环节。或者,它可能表明存在更大的问题和/或组织问题。

希望其中一项能让您走上正轨。如果没有,请扩展您的问题,详细了解按下保存按钮时发生了什么和没有发生什么。

【讨论】:

您确定的那一行是阻止我编译的那一行,但我在教程中看到它是这样做的。 @Specked 这确实感觉像是一个更大的问题。看起来 DailyClinicalPerformanceRecord 不是您的应用程序委托(特别是因为它是 UIViewController 的子类),尽管您将其视为是。如果您发布了整个项目,我相信我们可以弄清楚发生了什么,但也许是时候退后一步阅读 Apple 文档了。这是一个很好的开始:developer.apple.com/library/ios/#documentation/iPhone/…

以上是关于NSManagedObjectContext 帮助的主要内容,如果未能解决你的问题,请参考以下文章

为啥将 NSManagedObjectContext 保存为“干净”时会出现合并错误?

了解核心数据中 NSManagedObjectContext 的使用

从另一个方法中删除 NSManagedObjectContext 中的对象

无法使用CoreData调用非函数类型'NSManagedObjectContext'的值

iOS - 核心数据堆栈作为带有主 NSManagedObjectContext 的单例

从 Swift 2.3 -> 3.2 转换时,无法将 String 类型的值转换为指定类型 NSManagedObjectContext