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

时间:2013-10-09 11:02:26

标签: ios xcode5 kinvey

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

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

我已撤消最新修改以查看错误...但错误仍然存​​在。 所以我已经撤消了更多的修改,但错误仍然存​​在。

试图删除并添加我认为错误可能来自的框架,错误仍然存​​在。 (它的KinveyKit框架)

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

我在不同的文件夹中下载了应用程序的旧Git(几天前肯定会工作),运行它并且:同样的错误。

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

但是:如果我运行其他类似代码的应用程序,没有任何问题。 有人有任何想法吗?

我在这里发布了代码,它给我一个错误,只是为了给你一个想法...但我不认为代码中有任何错误,因为它一直都是以前工作过。

·H

@property (strong, nonatomic) KCSAppdataStore *store;

的.m

- (void)viewDidLoad
{
  ...

  _store = [KCSAppdataStore storeWithOptions:@{ KCSStoreKeyCollectionName : @"AnEntity",
                                                KCSStoreKeyCollectionTemplateClass : [AnEntity class]}];

  [_store queryWithQuery:[KCSQuery query]
          withCompletionBlock:^(NSArray *objectsOrNil1, NSError *errorOrNil) { ... }];

  ...
}

2 个答案:

答案 0 :(得分:1)

酷 - 讽刺

我花了一个下午从一个新项目重建应用程序,复制粘贴代码...... 现在我再次打开旧版本,尝试再次运行...只是再试一次,知道它会崩溃因为我没有改变一个字,它已经在我今天早些时候尝试过的时候已经崩溃了,而且...... ..惊讶:再次运行。没有错误。

-.-''解决我的问题呢?不知道。仍然认为这是一些缓存问题最终在一天之内得到解决,但在我试图解决它时却没有。

如果有人有类似的经历或有一些进一步的想法,请随意添加一些东西,总是很好,为下次这样的事情做好准备。

答案 1 :(得分:1)

我有一个类似的问题似乎是由写入钥匙串的损坏的KCSUser对象引起的。只要您拨打popObjectForKey,就会调用[KCSUser activeUser]方法。通过在application DidFinishLaunchingWithOptions:中首先添加代码,我能够解决这个问题。在以下代码有机会运行之前,请确保您没有在任何时候调用[KCSUser activeUser]

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);
}

这似乎可以清除/重置钥匙串。运行一次后,将其删除,您的应用程序应该正常运行。