无法识别的选择器发送到数组中的实例[重复]

Posted

技术标签:

【中文标题】无法识别的选择器发送到数组中的实例[重复]【英文标题】: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 吗? 【参考方案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.

【讨论】:

以上是关于无法识别的选择器发送到数组中的实例[重复]的主要内容,如果未能解决你的问题,请参考以下文章

[NSCFArray 长度]:发送到实例的无法识别的选择器

NSMutableArray:发送到实例的无法识别的选择器

无法识别的选择器发送到实例 Objective-C

Swift 3:发送到实例 Xcode 8 的无法识别的选择器 [重复]

Swift无法识别的选择器发送到实例

尝试将对象添加到可变数组时发送到实例的无法识别的选择器