代码之家  ›  专栏  ›  技术社区  ›  BkdD

突然:-[__NSArrayM popObjectForKey:]:无法识别的选择器发送到实例

  •  1
  • BkdD  · 技术社区  · 11 年前

    我正在开发一个应用程序,在某个阶段出现了这个错误:

    -[__NSArrayM popObjectForKey:]:无法识别的选择器已发送到实例

    我已经撤消了最新的编辑,看看哪里出了问题。。。但错误仍然存在。 所以我撤销了更多的编辑,但错误仍然存在。

    尝试删除并添加回我认为错误可能来自的框架,错误仍然存在。(这是KinveyKit框架)

    尝试用另一个肯定有效的代码行替换应用程序会抛出错误的代码行:即使是那个抛出错误的。

    我在另一个文件夹上下载了该应用程序的旧版Git(几天前肯定能正常工作),运行该应用程序:同样的错误。

    已卸载并重新安装Xcode:错误仍然存在。

    但是:如果我用类似的代码运行其他应用程序,就不会出错。 有人知道吗?

    我在这里发布代码,这让我产生了错误,只是为了给你一个想法。。。但我认为代码中没有任何错误,因为它以前一直有效。

    .小时

    @property (strong, nonatomic) KCSAppdataStore *store;
    

    .米

    - (void)viewDidLoad
    {
      ...
    
      _store = [KCSAppdataStore storeWithOptions:@{ KCSStoreKeyCollectionName : @"AnEntity",
                                                    KCSStoreKeyCollectionTemplateClass : [AnEntity class]}];
    
      [_store queryWithQuery:[KCSQuery query]
              withCompletionBlock:^(NSArray *objectsOrNil1, NSError *errorOrNil) { ... }];
    
      ...
    }
    
    2 回复  |  直到 11 年前
        1
  •  1
  •   BkdD    11 年前

    酷-- 讽刺

    我花了一下午的时间从一个新项目重建应用程序,复制粘贴代码。。。 现在我再次打开旧的一个,试着运行它。。。只是想再试一次,因为我知道它会崩溃,因为我一个字都没改,今天早上我每隔一次尝试它就崩溃了,而且。。。。惊喜:又跑了。没有错误。

    -.-'' 那么我的问题的解决方案是什么?不知道。我仍然认为是缓存问题最终解决了,但在我试图解决它的时候却没有。

    如果有人有过类似的经历或有进一步的想法,请随时添加一些内容,为下次发生这样的事情做好准备。

        2
  •  1
  •   natenash203    11 年前

    我有一个类似的问题,似乎是由一个腐败的 KCSUser 对象写入钥匙链。这个 popObjectForKey 方法似乎在任何时候都会被调用 [KCSUser activeUser] 。我通过添加下面的代码第一件事就解决了这个问题 application DidFinishLaunchingWithOptions: 。一定不要打电话 [KCSUser活动用户] 在以下代码有机会运行之前的任何时候。

    NSArray *secItemClasses = @[(__bridge id)kSecClassGenericPassword,
                                (__bridge id)kSecClassInternetPassword,
                                (__bridge id)kSecClassCertificate,
                                (__bridge id)kSecClassKey,
                                (__bridge id)kSecClassIdentity];
    for (id secItemClass in secItemClasses) {
        NSDictionary *spec = @{(__bridge id)kSecClass: secItemClass};
        SecItemDelete((__bridge CFDictionaryRef)spec);
    }
    

    这将清除/重置钥匙链。运行一次后,将其删除,您的应用程序就会正常运行。

    推荐文章