【问题标题】:Access variable which lies inside for-loop位于 for 循环内的访问变量
【发布时间】:2013-05-07 20:51:39
【问题描述】:

我有一个 for 循环,但无法从循环外访问变量:

for (int i = 0, j = 0, k = 0, l = 0; i < [array1 count] && j < [array2 count] && k < [array3 count] && l < [array4 count]; i++ && j++ && k++ && l++)
{

    NSDictionary *_myDict = [NSDictionary dictionaryWithObjectsAndKeys:[array1 objectAtIndex:i], @"Apples", [array2 objectAtIndex:j], @"Oranges", [array3 objectAtIndex:k], @"Grapes", [array4 objectAtIndex:l], @"Plums", nil];


}

从内部访问它。

我用单例和实例方法尝试过,它仍然无法访问并且总是返回 nil。

我很想拥有它的全局变量,但不能在循环中声明它。

【问题讨论】:

  • 您要访问哪个变量?
  • 感谢您的快速回复,我正在尝试访问整个字典_myDict。
  • 在for循环之外声明它?对你有帮助吗?
  • 我试过 NSDictionary *_myDict = @"My Dictionary";在循环之前,但只返回相同的字符串。
  • 在我的头文件中我声明了它:@property (nonatomic, retain) NSDictionary *_myDict;在我在循环之前声明它,将它从非原子更改为原子之后,它对其进行了转换,但仍然返回(null)。

标签: objective-c for-loop nsarray nsdictionary


【解决方案1】:
NSMutableArray *rows = [NSMutableArray array];
for (int i=0, j=0, k=0, l=0;
     i < [array1 count] && j < [array2 count] && k < [array3 count] && l < [array4 count];
     i++, j++, k++, l++)
{
     NSMutableDictionary *row = [NSMutableDictionary dictionary];
     [row setObject:[array1 objectAtIndex:i] forKey:@"Apples"];
     [row setObject:[array2 objectAtIndex:j] forKey:@"Oranges"];
     [row setObject:[array3 objectAtIndex:k] forKey:@"Grapes"];
     [row setObject:[array4 objectAtIndex:l] forKey:@"Plums"];
     [rows addObject:row];
}

现在将您的 arrayController 连接到 rows 数组,将其行类设置为 NSMutableDictionary,并在列绑定中使用 @"Apples" 等。希望能解决。

【讨论】:

  • 我想在它上面使用 NSPredicate,并且我正在使用绑定,但我只能对过滤后的结果执行此操作,一旦我可以访问字典...
  • 我正在成功填充我的 NSTableView,但过滤结果并非如此,因为在任何过滤之前 NSMutableDictionary _myDict 已经为空。
  • @JeremiahSmith 手头有rows 数组,您可以将NSPredicate[rows filteredArrayUsingPredicate:predicate] 一起应用。或者将谓词设置为arrayController,无论您需要什么。
  • @JeremiahSmith 看,字典只代表一行。在其上应用谓词是没有意义的。您将谓词应用于行数组,以将它们过滤掉。如果您使用可可绑定,则将arrayController.contentArray 绑定到rows,将表列绑定到arrayController.arrangedObjects.&lt;apples-whatever&gt;,将arrayController.filterPredicate 绑定到您的谓词对象,就是这样。
  • @JeremiahSmith 等等,它们都是一样的 :) 删除 j,k,l -- 只需使用 i
猜你喜欢
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2021-04-07
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多