【问题标题】:NSMutableDictionary + NSMutableArray crashNSMutableDictionary + NSMutableArray 崩溃
【发布时间】:2013-02-12 00:33:24
【问题描述】:

我有一个名为“myScheduleFullDictionary”的 NSMutableDictionary,设置如下:

  KEY             VALUE
"Day 1"         An NSMutableArray of NSMutableDictionaries
"Day 2"         An NSMutableArray of NSMutableDictionaries
"Day 3"         An NSMutableArray of NSMutableDictionaries

等等

我正在尝试解析它 - 基本上抓取其中一个 MutableArrays 作为其中一个键的值。 这是我的代码:

// First I make a mutableCopy of the entire Dictionary:
NSMutableDictionary *copyOfMyScheduleDictionary = [myScheduleFullDictionary mutableCopy];

// Next I grab & sort all the KEYS from it:
NSArray *dayKeysArray = [[copyOfMyScheduleDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];

// I set up an NSMutableArray to hold the MutableArray I want to grab: 
NSMutableArray *sessionsInThatDayArray = [[NSMutableArray alloc] init];

// Then I iterate through the KEYs and compare each to the one I'm searching for:
for (int i = 0; i < [dayKeysArray count]; i++) {

    NSString *currentDayKey = [dayKeysArray objectAtIndex:i];        
    if ([currentDayKey isEqualToString: targetDayString]) {
        NSLog(@"FOUND MATCH!!!");

        // I log out the NSMutableArray I found - which works perfectly:
        NSLog(@"found array is: %@", [copyOfMyScheduleDictionary objectForKey:currentDayKey]);

        // But when I try to actually grab it, everything crashes:
        sessionsInThatDayArray = [copyOfMyScheduleDictionary objectForKey:currentDayKey];
        break;
    }
}

我得到的错误是:

-[__NSDictionaryM name]: unrecognized selector sent to instance 0x1c5fb2d0

不确定为什么将“名称”指出为“无法识别的选择器”。 “name”是我声明并正在使用的“Session”类的 NSString 属性 - 可以以某种方式相关吗?

有什么见解吗?

编辑:

这是我的“SessionObject”类定义:

@interface SessionObject : NSObject


@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *speaker;
@property (nonatomic, strong) NSString *location;
@property (nonatomic, strong) NSDate *startTime, *endTime;
@property (nonatomic, strong) NSString *notes;
@property (nonatomic, strong) NSString *dayOfConference;


@end

【问题讨论】:

  • name 用在哪里了?
  • 你确定这是导致错误的行吗?是否添加了异常断点?日志应该有效,但下一行无效。
  • 如何添加异常断点?你的意思是 try-catch 块?
  • 在 Xcode 的断点侧边栏中,在底部,有一个加号。您可以通过它添加异常断点。它们是一旦抛出异常就会触发的断点(与@catch 完全不同)。
  • 等待。我想你是正确的。我认为它毕竟崩溃了。等等……

标签: iphone objective-c nsmutablearray nsmutabledictionary


【解决方案1】:
-[__NSDictionaryM name]: unrecognized selector sent to instance 0x1c5fb2d0

这意味着您正在尝试在 NSMutableDictionary 上调用 name,而您应该在 SessionObject 类的对象上调用它。检查您调用类似myObject.name[myObject name] 的行,看看myObject 的类型是否为SessionObject 而不是NSMutableDictionary

这里__NSDictionaryM 表示NSMutableDictionary 类型。

【讨论】:

    【解决方案2】:

    我不确定你的错误来自哪里 - 但你在那里做什么?为什么不直接写

    sessionsInThatDayArray = [myScheduleFullDictionary objectForKey:targetDayString];
    

    ???这就是 NSDictionary 的用途——你不需要手动搜索,你只需调用方法来查找密钥。取而代之的是,您复制了字典,提取了所有键,对键进行了排序,逐个遍历它们直到找到它-然后调用了 objectForKey!!!

    除此之外,在调试器中为所有 Objective-C 异常设置断点。当调用有问题的代码时它会停止,所以不需要大海捞针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      相关资源
      最近更新 更多