循环直到数组有数据

时间:2011-08-16 16:17:21

标签: iphone objective-c xcode

我需要设置某种循环,直到数组中包含数据为止。一些背景信息:应用程序与服务器通信并获取一些信息并将该信息填充到数组中。只有当该信息填充到数组中时,视图才会更改为下一个视图(因为视图中填充了来自数组的信息)。

我如何创建此循环?我目前正在使用NSTimer,但这不适合我的需求。

提前致谢!

3 个答案:

答案 0 :(得分:1)

当你说循环直到我认为你真的是指等到

首先,如果要在主线程上完成这个等待就忘了它,永远不要阻塞主线程。

您可能希望使用锁定而不是循环,并等待条件。这需要在等待数组填充的代码与填充数组的代码之间进行共享锁定。

首先创建一个像这样的共享条件锁:

typedef enum {
    MYConditionStateNoObjects,
    MYConditionStateHaveObjects
} MYConditionState;
...
sharedArray = [[NSMutableArray alloc] init];
sharedLock = [[NSConditionLock alloc] initWithCondition:MYConditionStateNoObjects];

填充数组的方法应该执行:

[sharedLock lockWhenCondition:MYConditionStateNoObjects];
// Your stuff to get the objects to add here.
[sharedArray addObjectsFromArray:theObjectsToAdd];
[sharedLock unlockWithCondition:MYConditionStateHaveObjects];

应该等到数组有对象的接收器执行此操作:

[sharedLock lockWhenCondition:MYConditionStateHaveObjects];
// ... Do something with the objects you got here
[sharedArray removeAllObjects];
[sharedLock unlockWithCondition:MYConditionStateNoObjects];

答案 1 :(得分:0)

您可以尝试使用以下库:http://allseeing-i.com/ASIHTTPRequest/How-to-use并查找异步部分

异步意味着您不会阻止主线程并等待响应返回。

答案 2 :(得分:0)

如果我明白了,那么当服务器中的数据添加到阵列时,您需要处理这个时刻。那你为什么不想使用 KVO 功能呢?它将允许您添加将监听阵列内容更改的观察者。