gpt4 book ai didi

ios - 无法更新核心数据中的位置

转载 作者:行者123 更新时间:2023-11-29 02:47:27 25 4
gpt4 key购买 nike

我需要更新核心数据库中的位置。当我添加对象或从该基础中删除它时,一切正常。当我想更新该库中的对象时出现问题。问题是程序抛出我:

线程 1:EXC_BAD_ACCES(code = 2,adres = 0x38)

这很奇怪,因为它会抛出此错误,但会更新核心数据中的对象。我在 Xcode 5 上使用模拟器。我试图在代码中逐行评论,但它已经无济于事了。查看错误地址和屏幕截图,没有相互兼容的地址。怎么了?

代码是这样的:

[self insertPositionRightAfterChangeValues:name rating:[changedRate stringValue] urlMain:[newInsert urlMain] contentUrl:[newInsert contentUrl] coverUrl:[newInsert coverUrl] date:[newInsert date] type:[newInsert type] int:integer];

以及此方法的其余部分:

-(void)insertPositionRightAfterChangeValues:(NSString *)name rating:(NSString *)rating urlMain:(NSString *)urlMain contentUrl:(NSString *)contentUrl coverUrl:(NSString *)coverUrl date:(NSString *)date type:(NSString *)type int:(int)position
{
int motherPosision = position;

//insert new one
NSManagedObjectContext *context2 = [self managedObjectContext];
Kwejki * newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Kwejki" inManagedObjectContext:context2];

newEntry.name = [[NSString alloc] initWithString: name];
newEntry.rating = [[NSString alloc] initWithString: rating];
newEntry.urlMain = [[NSString alloc] initWithString: urlMain];
newEntry.contentUrl = [[NSString alloc] initWithString: contentUrl];
newEntry.coverUrl = [[NSString alloc] initWithString: coverUrl];
newEntry.date = [[NSString alloc] initWithString: date];
newEntry.type = [[NSString alloc] initWithString: type];


NSLog(@"%@", newEntry.name);
NSLog(@"%@", newEntry.rating);
NSLog(@"%@", newEntry.urlMain);
NSLog(@"%@", newEntry.contentUrl);
NSLog(@"%@", newEntry.coverUrl);
NSLog(@"%@", newEntry.date);
NSLog(@"%@", newEntry.type);

NSError *error2;
if (![context2 save:&error2]) {
NSLog(@"Whoops, couldn't save: %@", [error2 localizedDescription]);
}
else{
NSLog(@"SAVED!!!");
}

}

还有这个错误的截图:

enter image description here

更新:

当我在调用方法以插入新对象的地方注释行时,出现以下错误:CoreData: error: Failed to call designated initializer on NSManagedObject class 'Kwejki'

更新 2:

@interface Kwejki : NSManagedObject<NSCopying>

@property (nonatomic, strong) NSString * type;
@property (nonatomic, strong) NSString * contentUrl;
@property (nonatomic, strong) NSString * coverUrl;
@property (nonatomic, strong) NSString * rating;
@property (nonatomic, strong) NSString * urlMain;
@property (nonatomic, strong) NSString * date;
@property (nonatomic, strong) NSString * name;

@end


@implementation Kwejki

@synthesize name;
@synthesize date;
@synthesize urlMain;
@synthesize rating;
@synthesize coverUrl;
@synthesize contentUrl;
@synthesize type;

-(Kwejki *)copyWithZone:(NSZone *)zone
{
Kwejki *copyModel = [[Kwejki allocWithZone:zone] init];

if(copyModel)
{
copyModel.name = [self name];
copyModel.date = [self date];
copyModel.urlMain = [self urlMain];
copyModel.rating = [self rating];
copyModel.coverUrl = [self coverUrl];
copyModel.contentUrl = [self contentUrl];
copyModel.type = [self type];
}
return copyModel;
}


@end



-(void)addNewPosition:(ScrollViewViewController *)ScrollController recentlyDownloadedItem:(KwejkModel *)modelTmp
{

if(modelTmp == nil)
{
NSLog(@"YES NULL");

}
else
{
NSLog(@"Not null");
}


Kwejki * newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Kwejki" inManagedObjectContext:self.managedObjectContext];
NSLog(@"%@", [modelTmp getNameOfItem]);

newEntry.name = [[NSString alloc] initWithString:[modelTmp getNameOfItem]];
newEntry.rating = [modelTmp getRateOfPosition];
newEntry.urlMain = [modelTmp getUrlAdress];
newEntry.contentUrl = [modelTmp getContentUrl];
newEntry.coverUrl = [modelTmp getCoverImage];
newEntry.date = [modelTmp getDateOfItem];

if([modelTmp getType] == photo)
{
newEntry.type = @"0";

}
else if([modelTmp getType] == gif)
{
newEntry.type = @"1";

}
else if ([modelTmp getType] == video)
{
newEntry.type = @"2";

}


NSLog(@"%@", newEntry.name);
NSLog(@"%@", newEntry.rating);
NSLog(@"%@", newEntry.urlMain);
NSLog(@"%@", newEntry.contentUrl);
NSLog(@"%@", newEntry.coverUrl);
NSLog(@"%@", newEntry.date);
NSLog(@"%@", newEntry.type);

NSError *error;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
else{
NSLog(@"UDALO SIE!!!");
}
[modelArray insertObject:newEntry atIndex:0];
[self.tableView reloadData];


}

我试图通过再次添加新对象作为更新来解决这个问题,但它也没有帮助。我如何添加新对象:我在位置上长按,新窗口打开,然后我添加新值,从 Main ViewController 的 View 方法调用,然后它崩溃了。当我如上所述添加正常对象但在单独的窗口中时一切正常。我真的不知道出了什么问题。

最佳答案

当我看到此错误时,通常意味着我没有正确设置 NSManageObject。

要检查的事情:

  1. 在 insertPositionRightAfterChangeValues 方法中添加断点,并逐步查找引发异常的位置。 (我的猜测是当你创建 Kwejki 对象时。)
  2. Kwejki 是 NSManageObject 的子类。
  3. Kwejki 实体和类名称是正确的。 (您能否显示 Kwejki 的 .xcdatamodeId 实体属性?)

如果一切正确,那么为了进行疯狂检查,我会长时间创建 Kwejki 对象。

NSEntityDescription *entity = [NSEntityDescription entityForName:NSStringFromClass([Kwejki class]) inManagedObjectContext:context2];
Kwejki* newEntry = [[Kwejki alloc] initWithEntity:entity insertIntoManagedObjectContext:context2];

然后您可以查看该实体是否有问题,或者您的 Kwejki 有问题。

附言作为有用的建议,而不是输入实体名称。

Kwejki * newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Kwejki" inManagedObjectContext:context2];

我会做这样的事情。

Kwejki * newEntry = [NSEntityDescription entityForName:NSStringFromClass([Kwejki class]) inManagedObjectContext:context2];

这将为您提供实体名称的编译器检查。

关于ios - 无法更新核心数据中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24937306/

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