Ios 自定义目标c类的新实例中是否已包含数据?

Ios 自定义目标c类的新实例中是否已包含数据?,ios,objective-c,objective-c-blocks,Ios,Objective C,Objective C Blocks,我想我缺少了一些关于objective-c编程的基本知识 调用堆栈如下所示: MyViewController调用一个块来设置对我的服务器的请求 [_myClient storePhoto:photo withCompletion: ^(KNPhotoInfo *retPhoto, NSError *error) { // do stuff }]; 此调用向我的服务器发出保存照片的请求,然后尝试处理响应: [NSURLConnection sendAsynchronousRequest:re

我想我缺少了一些关于objective-c编程的基本知识

调用堆栈如下所示: MyViewController调用一个块来设置对我的服务器的请求

[_myClient storePhoto:photo withCompletion: ^(KNPhotoInfo *retPhoto, NSError *error) { // do stuff }]; 
此调用向我的服务器发出保存照片的请求,然后尝试处理响应:

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
    if(error) //handle it
    @try
    {
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        KNPhotoInfo *photoInfo = [[KNPhotoInfo alloc] initWithPhotoDictionary:json[@"data"]];

        [_storage setObject:[photoInfo toDictionary] forKey:PhotoInfoKey];

        completionHandler(photoInfo, nil);
    }
    @catch (NSException *exception)
    {
        NSLog(@"Error parsing user info: %@", exception);
    }

}];
然而,如果我在调用photoInfo变量的init函数之前检查它,我可以看到一些数据,而不仅仅是其中的垃圾。如果我进入init函数,当分配某个对象时,我可以看到self对象闪烁,但它只是再次显示0个对象。在对init函数的调用返回后,一切似乎都很好,我可以看到我的对象,它的所有属性都是用json[data]初始化的,但只要我再次执行photoInfo,就会显示0个对象

有人能帮我吗?我认为这与调用类的self与对象初始化位置的self有关,但我感到困惑

编辑:添加更多的上下文。init函数如下所示:

- (instancetype) initWithPhotoDictionary:(NSDictionary *)dict{
    self = [super init];

    self.url                = dict[@"photo"][@"url"];
    self.challenge          = dict[@"photo"][@"challenge"];
    self.user               = dict[@"photo"][@"user"];
    self.pubDate            = dict[@"photo"][@"pub_date"];

    return self;
}
然而,当调试此调用内部时,self没有子对象,即使它显然有子对象,并且只说0个对象。令人沮丧的是

[_storage setObject:[photoInfo toDictionary] forKey:PhotoInfoKey];
碰巧我收到关于空值的投诉。然而,如果我打印照片信息的描述,我可以看到我所有的字段,填写正确

使用这种方法

- (KNPhotoInfo) initWithPhotoDictionary:(NSDictionary *)dict
{
 KNPhotoInfo *photoInfo = [[KNPhotoInfo alloc] init

    photoinfo.url                = dict[@"photo"][@"url"];
    photoinfo.challenge          = dict[@"photo"][@"challenge"];
    photoinfo.user               = dict[@"photo"][@"user"];
    photoinfo.pubDate            = dict[@"photo"][@"pub_date"];

    return photoInfo;
}

欢迎来到堆栈溢出!这里不接受仅仅是代码或实际上没有解决OP问题的答案。如果你有任何修改,使这篇文章更具信息性和帮助性,请尽快修改。我是stackoverflow的新手,我不知道如何使它可读。请帮助,这个答案的主要问题不是可读性。你可以跳过去看看社区对新成员的建议。干杯当你说你对那个调用中的null值有意见时,你是在破坏NS[Mutable]数组或NSDictionary中的一个方法吗?这是什么意思?通常,对象不会说话。你如何检查这个物体?“自我的孩子是什么?”阿明尼姆·阿瓦德(Aminegm Awad)与此类似。在与此抗争了一段时间之后,代码似乎正在工作,而调试器并没有向我展示我所期望的。通常将IVAR/属性及其值自显示为对象。如果您使用Xcode的变量视图检查尚未初始化的对象的属性,那么您确实看到了垃圾。“它可能恰好是可以理解的垃圾,但它并不能反映一种有意义的事态发展。”乔什·卡斯:你说得对。但在初始化对象之后,我仍然认为该对象没有进行任何初始化。如果我打印描述,我可以看到所有填写正确的项目,我必须假设问题出在xcode调试器上?