Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 非零整数值的核心数据EXC_BAD_访问_Ios_Objective C_Xcode_Core Data - Fatal编程技术网

Ios 非零整数值的核心数据EXC_BAD_访问

Ios 非零整数值的核心数据EXC_BAD_访问,ios,objective-c,xcode,core-data,Ios,Objective C,Xcode,Core Data,我有两个具有int64\t属性的核心数据模型。当我尝试为整型字段分配非零值时,其中一个可以正常工作,而另一个抛出EXC_BAD_访问。我已经阅读了关于重新创建NSManagedObject子类的答案,但没有成功。断开的类如下所示: @interface NoteObject : NSManagedObject @property (nonatomic) int64_t remoteID; @property (nonatomic) int64_t remoteArticleID; @prop

我有两个具有int64\t属性的核心数据模型。当我尝试为整型字段分配非零值时,其中一个可以正常工作,而另一个抛出EXC_BAD_访问。我已经阅读了关于重新创建NSManagedObject子类的答案,但没有成功。断开的类如下所示:

@interface NoteObject : NSManagedObject

@property (nonatomic) int64_t remoteID;
@property (nonatomic) int64_t remoteArticleID;

@property (strong, nonatomic) ArticleObject *article;

@property (strong, nonatomic) NSString *status;
@property (strong, nonatomic) NSString *token;

@property (strong, nonatomic) NSString *title;
@property (strong, nonatomic) NSString *noteContent;

@property (strong, nonatomic) NSDate *pubDate;
@property (strong, nonatomic) NSDate *modDate;

@end

@implementation NoteObject

@dynamic remoteID;
@dynamic remoteArticleID;

@dynamic article;

@dynamic status;
@dynamic token;

@dynamic title;
@dynamic noteContent;

@dynamic pubDate;
@dynamic modDate;

@end
有问题的行在此块中:

_noteObject = [NSEntityDescription insertNewObjectForEntityForName:@"Note" inManagedObjectContext:self.managedObjectContext];

_noteObject.remoteArticleID = 0; // this works
_noteObject.remoteArticleID = 1; // this crashes
真正让我困惑的是,在另一个模型中,我有相同类型的相同字段,它们将毫无困难地接受非零值:

bookmarkObject = [NSEntityDescription insertNewObjectForEntityForName:@"Bookmark" inManagedObjectContext:self.managedObjectContext];

bookmarkObject.remoteArticleID = 0; // this works
bookmarkObject.remoteArticleID = 1; // this works, too
我的.xcdatamodeld文件中是否有可能导致此问题

编辑

我的数据模型如下所示:

@interface NoteObject : NSManagedObject

@property (nonatomic) int64_t remoteID;
@property (nonatomic) int64_t remoteArticleID;

@property (strong, nonatomic) ArticleObject *article;

@property (strong, nonatomic) NSString *status;
@property (strong, nonatomic) NSString *token;

@property (strong, nonatomic) NSString *title;
@property (strong, nonatomic) NSString *noteContent;

@property (strong, nonatomic) NSDate *pubDate;
@property (strong, nonatomic) NSDate *modDate;

@end

@implementation NoteObject

@dynamic remoteID;
@dynamic remoteArticleID;

@dynamic article;

@dynamic status;
@dynamic token;

@dynamic title;
@dynamic noteContent;

@dynamic pubDate;
@dynamic modDate;

@end

好吧,如果其他人有这个问题,我从来没有找到一个令人满意的答案来解释为什么一个实体在工作而另一个实体没有。我的解决方法是重构属性,使用
NSNumber
wrappers而不是primitive
int64\t

@property (strong, nonatomic) NSNumber *remoteID;
@property (strong, nonatomic) NSNumber *remoteArticleID;
当然,这意味着装箱/取消装箱整数值

_noteObject.remoteArticleID = [NSNumber numberWithInt:1];

int intVar = [_noteObject.remoteArticleID intValue];

我也有同样的问题

当您在NSManagedObject中手动编辑属性时,xcode(或者编译器,或者两者之间的代码)有时会感到困惑——它最终将整数视为指针并试图直接访问内存——因此EXC_BAD_访问

无论如何,正如这个问题所解释的:,解决方案是删除旧类(显然是复制任何自定义代码,以便以后可以再次粘贴),然后让xcode为您重新生成它(在数据模型中选择实体,然后选择“编辑器/创建NSManagedObject子类…”)。在出现的对话框中,确保勾选了“对基本数据类型使用标量属性”

您可能需要手动编辑生成的类以将一些非标量属性转换回对象(我有一个日期对象,它转换成了NSDate以外的其他对象-我完全忘记了是什么,但它接受了手动编辑回NSDate)

这对我有用。希望对你有用


Ali

在模型文件中,检查实体的“类”属性是否设置为适当的类,而不是默认的
NSManagedObject


如果将其保留为
NSManagedObject
,则核心数据将在它自己生成的自定义
NSManagedObject
子类上自己创建属性,而不是使用自己的子类。大多数能手和二传手似乎都能发挥作用,但是,您可能会遇到非装箱原语属性和自定义getter和setter的问题。

NoteObject的remoteArticleID字段的配置与.xcdatamodeld文件中书签的配置有什么不同吗?是您自己编写的托管对象子类文件,还是由Xcode生成的?您应该考虑一下使用
mogenerator
创建托管对象类,我添加了数据模型编辑器的图像。如前所述,这些类是由Xcode生成的。@Raider:我只是想知道,因为Xcode生成的类文件通常具有
@property(nonatomic,retain)
,而不是
@property(strong,nonatomic)
+1为现有答案添加了更多的上下文。(你本可以把这个问题也标记为重复的)奇怪,但这个东西对我有用。必须有某种方法直接处理基元数据类型。