【问题标题】:Why does string show up in NSDictionary with quotes, but others don't? [duplicate]为什么字符串出现在 NSDictionary 中并带有引号,而其他的却没有? [复制]
【发布时间】:2012-05-18 05:28:06
【问题描述】:

所以我有一个填充的 NSMutableDictionary,但是当我将内容输出到 NSLog 时,在 for 循环中输入的条目的键和值显示不同,最终的 NSLog 调用甚至不输出任何内容。这里发生了什么???请帮忙!为什么在for循环中添加了条目周围的引号???

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                            numberOfPhotosAsString, @"PackageFileCount",
                            wtID, @"wtID",
                            uploadType, @"type",
                            nil];
    for (int i= 0; i < photos.count; i++)
    {
        NSString *finalFileName = [fileNameBase stringByAppendingFormat:@"%i", i];
        [params setObject:[[fileNames objectAtIndex:i] stringByAppendingString:@".jpg"] forKey:finalFileName];
        // This one doesn't do anything differently:
        //[params setValue:[[fileNames objectAtIndex:i] stringByAppendingString:@".jpg"] forKey:[fileNameBase stringByAppendingFormat:@"%i", i]];
    }
    NSLog(@"Params: %@", params);
    NSLog(@"Value: %@", [params objectForKey:@"SourceName_0"]);

NSLog 的输出(我只在 for 循环中添加了一个值:“SourceName_0”=“tbyg.jpg”,但是为什么“SourceName_0”周围的引号???这里发生的任何事情都阻止我访问该字典条目...

日志:

2012-05-09 12:38:26.448 PhotoUp[6231:707] Params: {
    PackageFileCount = 1;
    "SourceName_0" = "tbyg.jpg";
    type = T;
    wtID = "6bcb4126-4bbe-4b3d-be45-9a06cf56a22f";
}
2012-05-09 12:38:26.449 PhotoUp[6231:707] Value: (null)

【问题讨论】:

  • "SourceName_0"是什么对象?您可以使用 NSStringFromClass 遍历键并记录类型。
  • 它们都应该是字符串,但 type 和 wtID 也是字符串,但不要出现在引号中......我不明白......问题是我使用这些发布到网络表单,当我处理网络表单时,它没有找到“SourceName_x”...看看我的最后一行代码,然后查看它的日志输出...
  • 出现引号是因为字符串包含基本字母数字以外的内容——在本例中是下划线。我认为这与您的问题无关。我无法通过将此代码复制并粘贴到文件中来重现它(并使用显示的值填充未声明的变量),因此问题一定是您没有向我们展示的问题。
  • 嗯,引号是在NSDictionarys description 方法中定义的实现。根据我个人的观察,您通常只会在字符串中有空格或符号时看到引号。在您的情况下,SourceName_0 中的 _tbyg.jpg 中的 .,然后 wtID 中的 -
  • 所有代码都在这里。我将字典传递给 NSMutableURLRequest,但是当网页处理请求时,它会将键“SourceName_x”的值视为 nil。我决定使用 NSLog 输出字典的内容,它显示在那里(但带​​有引号),然后当我尝试使用 NSLog 输出该值时,它显示为 nil...

标签: objective-c ios nsdictionary nslog


【解决方案1】:

出现引号是因为字符串包含基本字母数字以外的其他内容——在本例中为下划线。这与"tbyg.jpg""6bcb4126-4bbe-4b3d-be45-9a06cf56a22f" 有引号的原因相同(它们分别包含一个点和破折号)。这就是description 方法的工作原理。它不会导致您的第二个日志失败。

【讨论】:

  • 我指的是 KEY 周围的引号而不是值。我认为简单的答案是您不允许在密钥名称中包含这些字符,因为它显然无法识别它......我将密钥的名称从“SourceName_ [x]”更改为“SourceName [x ]",它工作正常......
  • @HackyStack:我知道你指的是什么,但我不知道该说什么,但你错了。这是您的代码的粘贴箱,其中填充了变量:pastebin.com/k15JRjkw — 使用cc -framework Foundation --std=c99 编译它,您会看到字典查找工作正常,下划线或没有下划线。
  • @Chuck Hey Chuck 有没有办法删除这些引号呢?我的意思是删除它的通用方法,因为有些有引号而有些没有。有没有办法通过某个函数将它们全部传递给它们,如果它们存在则删除引号,如果它们没有引号则保持原样?
猜你喜欢
  • 2012-09-09
  • 1970-01-01
  • 2013-06-14
  • 2022-01-21
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多