我正在开发一个应用程序,在某个阶段出现了这个错误:
- [__ 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) { ... }];
...
}
答案 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);
}
这似乎可以清除/重置钥匙串。运行一次后,将其删除,您的应用程序应该正常运行。