【问题标题】:No visible @interface for 'NSMutableDictionary' declares the selector 'addObjects:forKey'“NSMutableDictionary”没有可见的@interface 声明选择器“addObjects:forKey”
【发布时间】:2014-05-07 21:30:40
【问题描述】:

我的代码给出了一个错误提示

“NSMutableDictionary”没有可见接口声明选择器“addObjects:forKey:”

.h

@interface ViewController : UIViewController{
    NSMutableDictionary *credtialsDictionary;
}
-(IBAction)registerlogin;
@end

.m

@implementation ViewController

-(IBAction)registerlogin{

    [credtialsDictionary addObjects:passwordFieldregister.text forKey:usernameFieldregister];
}
@end

我不明白为什么这个IBAction 不允许我向NSMutableDictionary 添加对象

【问题讨论】:

  • 你检查过 NSMutableArray 的规范,看看是否定义了addObjects:forKey:???
  • @HotLicks,尽管它会做的所有好事,看到 OP 正试图将对象添加到字典中......
  • 你为什么要调用一个名为addObject的方法s :却只传递一个对象?
  • @Jonathan。 ——哎呀!! ;)
  • 用户,两个非常关键的编程技能是学习查找和使用参考文档以及学习实际阅读错误消息(而不仅仅是将它们解释为“哦,有东西神秘错误”)。你基本上在这两个方面都没有通过这个测试。下次请努力做得更好。

标签: ios objective-c cocoa-touch compiler-errors nsmutabledictionary


【解决方案1】:

因为NSMutableDictionary 中没有实例方法addObjects:forKey:

您要查找的方法是setObject:forKey:。 (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/Reference/Reference.html)

如果你说为什么你认为方法应该是addObjects:forKey:,我可以用更通用的方式帮助你。但一般来说,您想查看 Apple 的文档(如上面的链接,通常只需 google 类名),或查看标题,在 Xcode 中,您可以按 Cmd-Shit-O 然后输入类的名称你可以从那里打开标题。

在这种情况下,您使用错误方法的一个线索是 addObjects 是复数形式(而 forKey 不是),而您只是尝试添加一个对象。

【讨论】:

  • 不,它没有。不需要对OP那么激进。这是他们的第一个问题,他们 15 岁。让我们尽量不要让人们远离 stackoverflow 和编程?
  • 这对我很有帮助,谢谢,在我投票之前我从未见过这个,但我的声誉还不够高
  • Danstett14,你知道什么是接口和选择器吗?如果您通读 Apple 文档中的介绍页面,它会告诉您它们是什么,您将能够自己理解错误消息。在这里提问并没有错,下次遇到错误时,您可以自己解决,这样会更快:)
【解决方案2】:

可能是因为方法名是setObject:forKey:

【讨论】:

  • 它确实回答了这个问题,从问题的上下文来看,他正在寻找的方法不是addObjects:forKey:(不存在)它是setObject:forKey:
  • 即使我把 set object:forKey: 它给了我同样的错误
  • “NSMutableDictionary”没有可见界面声明选择器“addObject:forKey:”
  • addObject:forKey: 更改为setObject:forKey:,这似乎是您真正要寻找的方法。
  • 谢谢,我不再收到错误消息,但是当我测试它时,我可以注册用户名和密码,但它不会让我使用新的用户名和密码登录
【解决方案3】:

没有这样的方法addObjects:forKey:,这没有意义,因为多个对象对应一个键没有意义。但是,如果您想在一次调用中为键添加多个对象,那么如果您愿意,可以很容易地通过类别添加一些东西。一个例子:

#import <Foundation/Foundation.h>

@interface NSMutableDictionary (CBVAdditions)

- (void)cbvSetObjects:(NSArray *)objects forKeys:(NSArray *)keys;

@end

@implementation NSMutableDictionary (CBVAdditions)

- (void)cbvSetObjects:(NSArray *)objects forKeys:(NSArray *)keys
{
    NSDictionary *tempDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
    [self addEntriesFromDictionary:tempDictionary];
}

@end

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSMutableDictionary *md = [NSMutableDictionary dictionary];
        [md cbvSetObjects:@[@"obj1", @"obj2"] forKeys:@[@"key1", @"key2"]];
        NSLog(@"md = %@", md);
    }
}

输出:

2014-05-07 15:51:03.056 无标题[38754:507] md = { 键1 = obj1; 键2 = obj2; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2021-09-22
    相关资源
    最近更新 更多