nsstring在记录和分配时显示不同的结果

时间:2010-07-27 21:01:44

标签: iphone nsstring

我有以下代码:

- (void)loadVersionDataToTable:(int)versionIndex {

OptimizationReportDate* datedVersions = [self.optimizationReport.datedResults objectAtIndex:0];
ReportDateVersion* version = [datedVersions.versions objectAtIndex:versionIndex];
ReportDateVersionSegment *seg = [version.versionSegments objectAtIndex:0];

NSString* command = (@"loadRevenueTable( %@ , %@ , %@ , %@ , %@ , %@ , %@ , %@ )",
                               (@"%@",[seg.values objectForKey:@"PageRequest"]),
                               (@"%@",[seg.values objectForKey:@"PageDisplay"]),
                               (@"%@",[seg.values objectForKey:@"Completions"]),
                               (@"%@",[seg.values objectForKey:@"CR"]),
                               (@"%@",[seg.values objectForKey:@"VistisGeneratingRevenue"]),
                               (@"%@",[seg.values objectForKey:@"RPV"]),
                               (@"%@",[seg.values objectForKey:@"AOV"]),
                               (@"%@",[seg.values objectForKey:@"TotalRevenue"]));

NSLog(@"loadRevenueTable( %@ , %@ , %@ , %@ , %@ , %@ , %@ , %@ )",
      (@"%@",[seg.values objectForKey:@"PageRequest"]),
      (@"%@",[seg.values objectForKey:@"PageDisplay"]),
      (@"%@",[seg.values objectForKey:@"Completions"]),
      (@"%@",[seg.values objectForKey:@"CR"]),
      (@"%@",[seg.values objectForKey:@"VistisGeneratingRevenue"]),
      (@"%@",[seg.values objectForKey:@"RPV"]),
      (@"%@",[seg.values objectForKey:@"AOV"]),
      (@"%@",[seg.values objectForKey:@"TotalRevenue"]));

[webView stringByEvaluatingJavaScriptFromString:command];

}

nslog命令打印出具有正确属性的函数调用的所需输出,同时为命令属性分配了从nsdictionary中检索到的最后一个值(values属性是nsdictionary)这让我疯狂?? 任何人 ? log和nsstring *命令的顺序也无关紧要。

3 个答案:

答案 0 :(得分:0)

我真的很惊讶,至少没有给你一个警告。看起来你正在为一大堆字符串分配command,所以最后一个是坚持的。我想你想要的是这个。

OptimizationReportDate* datedVersions = [self.optimizationReport.datedResults objectAtIndex:0];
ReportDateVersion* version = [datedVersions.versions objectAtIndex:versionIndex];
ReportDateVersionSegment *seg = [version.versionSegments objectAtIndex:0];

NSString* command = [NSString stringWithFormat:@"loadRevenueTable( %@ , %@ , %@ , %@ , %@ , %@ , %@ , %@ )",
                     [seg.values objectForKey:@"PageRequest"],
                     [seg.values objectForKey:@"PageDisplay"],
                     [seg.values objectForKey:@"Completions"],
                     [seg.values objectForKey:@"CR"],
                     [seg.values objectForKey:@"VistisGeneratingRevenue"],
                     [seg.values objectForKey:@"RPV"],
                     [seg.values objectForKey:@"AOV"],
                     [seg.values objectForKey:@"TotalRevenue"]];

NSLog(@"loadRevenueTable( %@ , %@ , %@ , %@ , %@ , %@ , %@ , %@ )",
      [seg.values objectForKey:@"PageRequest"],
      [seg.values objectForKey:@"PageDisplay"],
      [seg.values objectForKey:@"Completions"],
      [seg.values objectForKey:@"CR"],
      [seg.values objectForKey:@"VistisGeneratingRevenue"],
      [seg.values objectForKey:@"RPV"],
      [seg.values objectForKey:@"AOV"],
      [seg.values objectForKey:@"TotalRevenue"]);

[webView stringByEvaluatingJavaScriptFromString:command];

答案 1 :(得分:0)

这是错误的:

NSString* command = (@"loadRevenueTable( %@ , %@ , %@ , %@ , %@ , %@ , %@ , %@ )",
                           (@"%@",[seg.values objectForKey:@"PageRequest"]),
                           (@"%@",[seg.values objectForKey:@"PageDisplay"]),
                           (@"%@",[seg.values objectForKey:@"Completions"]),
                           (@"%@",[seg.values objectForKey:@"CR"]),
                           (@"%@",[seg.values objectForKey:@"VistisGeneratingRevenue"]),
                           (@"%@",[seg.values objectForKey:@"RPV"]),
                           (@"%@",[seg.values objectForKey:@"AOV"]),
                           (@"%@",[seg.values objectForKey:@"TotalRevenue"]));

那不是你想做的事。请改用:

NSString* command = [NSString stringWithFormat:@"loadRevenueTable( %@ , %@ , %@ , %@ , %@ , %@ , %@ , %@ )",
                           (@"%@",[seg.values objectForKey:@"PageRequest"]),
                           (@"%@",[seg.values objectForKey:@"PageDisplay"]),
                           (@"%@",[seg.values objectForKey:@"Completions"]),
                           (@"%@",[seg.values objectForKey:@"CR"]),
                           (@"%@",[seg.values objectForKey:@"VistisGeneratingRevenue"]),
                           (@"%@",[seg.values objectForKey:@"RPV"]),
                           (@"%@",[seg.values objectForKey:@"AOV"]),
                           (@"%@",[seg.values objectForKey:@"TotalRevenue"])];

答案 2 :(得分:0)

你在这里做真的奇怪的东西!可能来自另一种语言。 (a,b)在技术上是C,但我不明白为什么你会这样做。

(a,b)评估为:评估a,然后评估b,并使用b的结果。

所以

(@"%@",[seg.values objectForKey:@"PageRequest"])

实际上意味着

[seg.values objectForKey:@"PageRequest"]

在实践中。或者我错过了一些新的语言功能。

至于您对command的作业,您也会获取(a,b,c,..)列表的最后一个元素。使用

[NSString stringWithFormat:@"%@,%@,%@",a,b,c]

代替。