gpt4 book ai didi

ios - 无法创建 UIManagedDocument

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:49 25 4
gpt4 key购买 nike

我正在尝试使用 Core Data 制作一个 iPhone 应用程序。我必须使用 NSManagedObjectContext 来访问数据,为此我使用了 UIManagedDocument。但是,如果我尝试使用 UIManagedDocument 创建文档,则文档的 openWithCompletionHandler 不会成功。这就是为什么我的 NSManagedObjectContext 总是 nil 并且 Xcode 说无法在等位置创建文档的原因。以下是类:

AddUserViewController.h

#import <UIKit/UIKit.h>

@interface AddUserViewController : UIViewController

@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (nonatomic,strong) UIManagedDocument *document;

@end

AddUserViewController.m

#import "AddUserViewController.h"
#import "User.h"
#import "User+Create.h"

@interface AddUserViewController ()
@property (weak, nonatomic) IBOutlet UITextField *nameField;
@property (weak, nonatomic) IBOutlet UITextField *ageField;
@property (weak, nonatomic) IBOutlet UITextField *sexField;
@property (weak, nonatomic) IBOutlet UITextField *weightField;
@property (weak, nonatomic) IBOutlet UITextField *activityField;


@end

@implementation AddUserViewController

-(void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext{
_managedObjectContext = managedObjectContext;
}



-(void)createOrWriteDocument{
NSURL *url = [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentationDirectory inDomains:NSUserDomainMask]firstObject];
url = [url URLByAppendingPathComponent:@"Activities"]; // edited mistakenly deleted
self.document = [[UIManagedDocument alloc] initWithFileURL:url];

if ([[NSFileManager defaultManager] fileExistsAtPath:[url path]]) {
[self.document openWithCompletionHandler:^(BOOL success) {
if (success) [self documentIsReady];
if (!success){
NSLog(@"could not open document at %@",url);
}

}];


} else {
[self.document saveToURL:url
forSaveOperation:UIDocumentSaveForCreating
completionHandler:^(BOOL success) {
if (success) {
[self documentIsReady];
}
if (!success){
NSLog(@"could not create document at %@",url);
}
}];
}

}


- (void)documentIsReady
{
if (self.document.documentState == UIDocumentStateNormal) {
self.managedObjectContext = self.document.managedObjectContext;
} }

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
if (!self.managedObjectContext) {
[self createOrWriteDocument];
}

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];
}

-(void)dismissKeyboard{
[self.nameField resignFirstResponder];
[self.ageField resignFirstResponder];
[self.sexField resignFirstResponder];
[self.weightField resignFirstResponder];
[self.activityField resignFirstResponder];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

if ([segue.identifier isEqualToString:@"setUser:"]) {

//User *user = [[User alloc]init];
User *user = [User createUserWithname:self.nameField.text
withAge:[NSNumber numberWithDouble:[self.ageField.text doubleValue]]
withSex:self.sexField.text
withWeight:[NSNumber numberWithDouble:[self.weightField.text doubleValue]]
withActivity:self.activityField.text
inManagedObjectContext:self.managedObjectContext];

if ([segue.destinationViewController respondsToSelector:@selector(setUser:)]) {
[segue.destinationViewController performSelector:@selector(setUser:) withObject:user];

}
}

}

@end

编辑

我解决了这个问题。问题出在 NSURL *url = [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentationDirectory inDomains:NSUserDomainMask]firstObject];线。我使用 NSDocumentDirectory 而不是 NSDocumentationDirectory,它解决了问题。

最佳答案

您可以尝试使用此代码来创建您的 managedobjectcontext。

- (NSManagedObjectContext *) managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return _managedObjectContext;
}

关于ios - 无法创建 UIManagedDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20313332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com