Ios 初始化错误的类
i类 问题是,当我尝试以顺序方式提升属性时Ios 初始化错误的类,ios,objective-c,Ios,Objective C,i类 问题是,当我尝试以顺序方式提升属性时 Collections *tempLocalCollection = [[Collections alloc] init]; 我错了 -[Collections setId:]:无法识别的选择器发送到实例0xff8afb0 2015-09-16 10:25:14.235应用程序[1042:128375]*** 由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:“-[Collections setId:]:
Collections *tempLocalCollection = [[Collections alloc] init];
我错了
-[Collections setId:]:无法识别的选择器发送到实例0xff8afb0 2015-09-16 10:25:14.235应用程序[1042:128375]***
由于未捕获异常而终止应用程序
“NSInvalidArgumentException”,原因:“-[Collections setId:]:
已将无法识别的选择器发送到实例0xff8afb0'
我错在哪里
收藏
tempLocalCollection.id = [f numberFromString:[NSString stringWithFormat:@"%@", @"0"]];
tempLocalCollection.action = @"client_insert";
这就是使用该类的方法以及它出错的地方。
我认为上下文是一样的,对吗
#import "Collections.h"
#import "Items.h"
@implementation Collections
@dynamic datetime_creation;
@dynamic datetime_last_update_client;
@dynamic datetime_last_update_server;
@dynamic local_delete;
@dynamic action;
@dynamic id;
@dynamic label;
@dynamic labelServer;
@dynamic ref_user;
@dynamic sorting;
@dynamic system;
@dynamic collection_item;
@end
-(集合*)upgrateListCollection:(NSDictionary*)coll{
NSNumberFormatter*f=[[NSNumberFormatter alloc]init];
f、 numberStyle=NSNumberFormatterDecimalStyle;
NSNumber*id=[f numberFromString:[nsstringwithformat:@“%@”,coll[@“id”]];
集合*tempLocalCollection=[[Collections alloc]init];
NSArray*tmp=[Collections MR_findByAttribute:@“id”with value:id];
如果(tmp.count!=0){
tempLocalCollection=tmp[0];
}
如果(!tempLocalCollection.isAccessibilityElement){
tempLocalCollection.id=[f numberFromString:[NSString stringWithFormat:@“%@”,“0”];
tempLocalCollection.action=@“客户端插入”;
}否则{
如果([tempLocalCollection.local_delete isEqual:@“1”]){
tempLocalCollection.action=@“客户端\u删除”;
}否则{
if([tempLocalCollection.label isEqual:coll[@“label”]])){
if(templacalCollection.datetime\u last\u update\u client
是托管对象,需要在其管理上下文中创建。NSManagedObject
子类(集合
)属性是动态的,它们的setter和getter是
因此,当您使用alloc/init
创建集合的对象时,在这种情况下,不会创建动态属性,因此会将异常无法识别的选择器发送到实例
创建NSManagedObject
的正确方法是
-(Collections *) upgrateListCollection:(NSDictionary *) coll{
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber *id = [f numberFromString:[NSString stringWithFormat:@"%@", coll[@"id"]]];
Collections *tempLocalCollection = [[Collections alloc] init];
NSArray *tmp = [Collections MR_findByAttribute:@"id" withValue:id];
if(tmp.count != 0){
tempLocalCollection = tmp[0];
}
if(!tempLocalCollection.isAccessibilityElement){
tempLocalCollection.id = [f numberFromString:[NSString stringWithFormat:@"%@", @"0"]];
tempLocalCollection.action = @"client_insert";
}else{
if([tempLocalCollection.local_delete isEqual: @"1"]){
tempLocalCollection.action = @"client_delete";
}else{
if([tempLocalCollection.label isEqual:coll[@"label"]]){
if(tempLocalCollection.datetime_last_update_client < coll[@"datetime_last_update_server"]){
tempLocalCollection.action = @"client_update";
}else{
tempLocalCollection.action = @"server_update";
}
}
}
}
if(tempLocalCollection != nil){
tempLocalCollection.labelServer = coll[@"label"];
tempLocalCollection.datetime_last_update_server = coll[@"datetime_last_update_server"];
tempLocalCollection.datetime_creation = coll[@"creation_utc_server"];
}
return tempLocalCollection;
}
如果要创建集合的临时对象
,则将nil
作为管理对象上下文传递
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Collections" inManagedObjectContext:myMOC];
Collections *collection = (Collections *)[[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:myMOC];
其中定义了
集合的id
。Hm?必须在托管对象上下文中创建托管对象。你永远不应该alloc/init它。这是你的管理对象上下文,通常我们使用在应用程序委托文件中创建的上下文。您可以使用application app Delegated访问最后一件事:如果我在db中的表上的Collections类中插入属性,系统将中断。为什么?我需要另一个属性来临时保存值
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Collections" inManagedObjectContext:myMOC];
Collections *collection = (Collections *)[[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:myMOC];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Collections" inManagedObjectContext:myMOC];
Collections *tempObj = (Collections *)[[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];