Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 初始化错误的类_Ios_Objective C - Fatal编程技术网

Ios 初始化错误的类

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:]:

i类

问题是,当我尝试以顺序方式提升属性时

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];