【发布时间】:2013-06-09 08:22:05
【问题描述】:
我正在开发一款基于回合制的 iOS 游戏,并尝试填充玩家参与的游戏列表。
for (unsigned i = 0; i < [matches count]; i++)
{
// Only load data for games in progress.
// NOTE: Might want to handle finished games later.
if ([matches[i] status] != GKTurnBasedMatchStatusEnded)
{
// Send off another block to retrieve the match's data.
[(GKTurnBasedMatch*)matches[i] loadMatchDataWithCompletionHandler: ^(NSData *matchData, NSError *error)
{
// Prepare the game.
Game* game;
if (matchData.length == 0)
{
// If the match data is empty, this is a new game. Init from scratch.
game = [[Game alloc] init];
}
else
{
// Otherwise, unpack the data and init from it.
game = [NSKeyedUnarchiver unarchiveObjectWithData:matchData];
}
game.match = matches[i];
// Load the displayNames for the players.
bool lastIndex = i == ([matches count] - 1);
[self loadPlayerIdentifiersForGame:game intoArray:blockGames lastIndex:lastIndex];
}];
}
}
不幸的是,我遇到了一个问题,我无法用索引标记每个块。也就是说,在块执行时,i 始终是0。有没有一种方法可以确保该区块知道 i 在它启动时是什么?
【问题讨论】:
-
每个块都应该在创建块时准确捕获
i的值。我不明白为什么在执行块时i应该始终为零。 -
你试过代替i,捕获__block int j=i;然后代替我使用 j ?
标签: iphone ios objective-c ios6 objective-c-blocks