【问题标题】:unrecognized selector sent to instance in Array [duplicate]无法识别的选择器发送到数组中的实例[重复]
【发布时间】:2013-07-01 06:02:30
【问题描述】:

我正在尝试将一个对象添加到一个数组中,但它发送了 zig bart 错误 “无法识别的选择器发送到实例” 下面是我的代码

AppDelegate     *appdelegate              = (AppDelegate *)[[UIApplication sharedApplication]delegate];
    NSDictionary *infomation = [self dictionaryWithContentsOfJSONString:@"Contacts.json"];
    IstructContactsOrgByEntity *ObjIstructContactsOrgByEntity=[[IstructContactsOrgByEntity alloc]initWithIstructContactsOrgByEntity:infomation];
    NSArray *array=[infomation objectForKey:@"contacts_list"];
    for (int ndx = 0; ndx < [array count]; ndx++)
    {
        NSDictionary *stream = (NSDictionary *)[array objectAtIndex:ndx];
        IstructContacts_List *ObjIstructContacts_List=[[IstructContacts_List alloc]initWithIstructContacts_List:stream];
        NSArray *Qnarray=[stream objectForKey:@"contacts"];
        for (int i=0; i<Qnarray.count; i++)
        {
            NSDictionary *Qnstream = (NSDictionary *)[Qnarray objectAtIndex:i];
            IstructContacts *ObjIstructContacts=[[IstructContacts alloc]initWithIstructContacts:Qnstream];
            [ObjIstructContacts_List.m_muteArrContacts addObject:ObjIstructContacts];
        }

        [ObjIstructContactsOrgByEntity.m_muteArrContacts_List addObject:ObjIstructContacts_List];

    }
    [appdelegate.m_ArrContactsOrgEntity addObject:ObjIstructContactsOrgByEntity];

最后一行[appdelegate.m_ArrContactsOrgEntity addObject:ObjIstructContactsOrgByEntity]; 导致我的问题。

【问题讨论】:

  • 我想知道有多少关于 unrecognized selectorJSON 的问题?我敢打赌,我可以在 2 分钟内找到 5 个骗子。
  • 什么是 zig bart 错误?您是说 SIGABRT 吗?

标签: iphone ios objective-c ipad nsmutablearray


【解决方案1】:

您的问题是编译器认为您已将“m_ArrContactsOrgEntity”声明为 NSMutableArray 以外的其他内容。

否则,您不会看到“无法识别的选择器”错误。

给你的另一个建议是,Objective-C 中的最佳实践是变量应该始终以小​​写字母开头。将“ObjIstructContacts”、“Qnarray”和“Qnstream”更改为以小写字母开头。

【讨论】:

    【解决方案2】:
    **AppDelegate.h**
    
    @property(nonatomic,retain) NSMutableArray *m_ArrContactsOrgEntity;
    
    
    @synthesize m_ArrContactsOrgEntity;
    
    **AppDelegate.m**
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
       self.m_ArrContactsOrgEntity = [[[NSMutableArray alloc] init] autorelease];
    }
    

    然后使用 AppDelegate 对象添加对象。

    谢谢。

    【讨论】:

    • 虽然这看起来是正确的,但我几乎没有什么建议只是为了稍微改进一下。这假设开发人员没有使用ARC,您应该将其包含在您的答案中,甚至可能提供ARC 版本,只需将retain 更改为strong 并删除autorelease,建议(不需要)@synthesize 应该像@synthesize m_ArrContactsOrgEntity = _m_ArrContactsOrgEntity; 一样完成。
    • 我还建议在您的答案中解释您的代码的作用,因为如果新开发人员来寻找答案,他们不会知道这里有什么。没有解释的代码本身通常很糟糕,但有解释可以大大改善答案。只有有助于改进您的答案的建议,如果您愿意,您可以忽略它们。
    【解决方案3】:
    m_ArrContactsOrgEntity must be NSmutableArray instead of NSArray.
    
    NOW, You will add any items in m_ArrContactsOrgEntity array.
    

    【讨论】:

      猜你喜欢
      • 2013-05-18
      • 1970-01-01
      • 2015-12-09
      • 2015-03-03
      • 1970-01-01
      • 2019-08-28
      • 2012-07-24
      相关资源
      最近更新 更多