ios - 在 IOS 中遍历 NSDictionary 和计时事件
<p><p>我是 IOS/Objective C 的新手,我正在尝试找出创建集合、迭代它以及为事件计时的最佳方法。 </p>
<p>我有一首歌曲的一系列歌词,当音乐在歌曲的正确位置播放时,我希望一首歌曲的单独一行出现在屏幕上。因此,我开始执行以下操作:我将各个行放入 Dictionary 以及该行应该出现的毫秒值。 </p>
<pre><code> NSDictionary *bualadhBos = [NSDictionary dictionaryWithObjectsAndKeys:
, @"Muid uilig ag bualadh bos, ",
, @"Muid uilig ag tógáil cos, ",
, @"Muid ag déanamh fead ghlaice, ",
, @"Muid uilig ag geaibíneacht. ",
, @"Buail do ghlúine 1, 2, 3, ",
, @"Buail do bholg mór buí, ",
, @"Léim suas, ansin suigh síos, ",
, @"Seasaigh suas go hard arís. ",
, @"Sín amach do dhá lamh, ",
, @"Anois lig ort go bhfuil tú ' snámh. ",
, @"Amharc ar dheis, ansin ar chlé, ",
, @"Tóg do shúile go dtí an spéir. ",
, @"Tiontaigh thart is thart arís, ",
, @"Cuir síos do dhá lámh le do thaobh, ",
, @"Lámha suas is lúb do ghlúin, ",
, @"Suigí síos anois go ciúin. ", nil
];
</code></pre>
<p>然后我想遍历字典,创建一个 Timer,它会调用一个负责更改 textLayer 中文本的方法</p>
<pre><code>for (id key in bualadhBos ) {
NSTimer *timer;
timer = [ target:self selector:@selector(changeText) userInfo:nil repeats:NO]];
}
-(void)changeText {
// change the text of the textLayer
textLayer.string = @"Some New Text";
}
</code></pre>
<p>但是当我开始调试它并检查它是如何工作的时,我注意到在调试器中项目出现在字典中的顺序都被打乱了。我还担心(我对此知之甚少)我正在创建多个计时器,并且可能有更有效的方法来解决这个问题。</p>
<p>任何方向将不胜感激。 </p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>字典以最适合哈希算法的方式按定义排序,因此您永远不应依赖它们的顺序。</p>
<p>在您的情况下,最好构建一棵二叉树并拥有一个每秒触发一次的 NSTimer,执行二叉树搜索并返回提供的时间偏移量最接近的字符串。</p>
<p>如果您使用 AVFoundation 或 AVPlayer 进行播放。然后要将字幕与媒体播放同步,您可以使用 <code>addPeriodicTimeObserverForInterval</code> 之类的东西每秒触发一次计时器并在二叉树中执行搜索并更新 UI。</p>
<p>在伪代码中:</p>
<pre><code>[player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:NULL usingBlock:^(CMTime time) {
// get playback time
NSTimeInterval seconds = CMTimeGetSeconds(time);
// search b-tree
NSString* subtitle = MyBtreeFindSubtitleForTimeInterval(seconds);
// update UI
myTextLabel.text = subtitle;
}];
</code></pre></p>
<p style="font-size: 20px;">关于ios - 在 IOS 中遍历 NSDictionary 和计时事件,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/25996838/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/25996838/
</a>
</p>
页:
[1]