3

我用 . 创建了一个故事板UITableViewController,然后添加了一个核心数据实体。此时应用程序构建并运行没有错误,但UITableViewController没有显示任何数据。

我删除了 TVC 并在 StoryBoard 中重建,但自从我在运行应用程序并尝试打开 TVC 时遇到错误:

*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+entityForName:nil 不是搜索实体名称“景点”的合法 NSManagedObjectContext 参数

通过一些研究,意识到这是由于我managedObjectContext是空的,但对于我的生活,我无法弄清楚为什么它是空的。

在 TVC 头文件中:

#import <UIKit/UIKit.h>
#import "Attractions.h"
#import "AttractionListViewCell.h"
#import "ApplicationNameAppDelegate.h"

@interface AttractionListViewController : UITableViewController
{
    NSManagedObjectContext *managedObjectContext;
    NSMutableArray *AttractionsArray;    
}

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSMutableArray *AttractionsArray;

- (void) fetchrecords;

@end

在 TVC 模型文件中:

ApplicationNameAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = [appDelegate managedObjectContext];

NSLog(managedObjectContext);
// Create connection to the DB via Context
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Attractions" inManagedObjectContext:managedObjectContext];    

ApplicationNameAppDelegate.h文件中:

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;

您可以提供的任何帮助或见解将不胜感激。

编辑 - 添加 AppDelegate 信息:

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

@class AttractionListViewController;

@interface AppNameAppDelegate : UIResponder <UIApplicationDelegate>
{
    NSManagedObjectModel *managedObjectModel;
    NSManagedObjectContext *managedObjectContext;
    NSPersistentStoreCoordinator *persistentStoreCoordinator;
}

@property (strong, nonatomic) AttractionListViewController *viewController;
@property (strong, nonatomic) UIWindow *window;

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;

@end
4

3 回答 3

1

这一行:

NSManagedObjectContext *managedObjectContext = [appDelegate managedObjectContext];

您正在声明一个本地 managedObjectContext 并分配它,而不是您应该做什么:

managedObjectContext = [appDelegate managedObjectContext];

这将使用 TVC 的 iVar

于 2012-11-04T10:53:01.617 回答
0

所以我发现了问题所在。在 xcode 生成的示例中,我没有从 AppDelegate 复制所有类,因此定义 managedObject 和持久存储等的类不存在。

于 2012-11-20T16:40:50.060 回答
-1

在您的 View Controller 实现文件中,就在这段代码下面:

- (void)viewDidLoad
{

添加这段代码:

id delegate = [[UIApplication sharedApplication] delegate]; self.managedObjectContext = [delegate managedObjectContext];
于 2013-06-26T22:29:36.640 回答