sudzc コードを使用して Web サービス メソッドを呼び出していますが、受信した応答で呼び出されるコールバック ハンドラがあります。
私の問題は、サービスを呼び出すメソッドがあるユーティリティ クラスがあることです。このメソッドは、View Controller クラスとセレクターからバックグラウンドで呼び出されます。
ユーティリティ メソッドには、サービス コール ロジックが記述されている for ループがあります。コールバック メソッドが呼び出されて結果が受信されるまで、次のレコードをフェッチするのを待ちたいと思います。しばらくやりましたが、Web サービスを呼び出した後に設定したフラグのステータスを確認し、コールバック メソッドでフラグを false に設定して次の行を取得することはできません。
以下のコードでView Controllerからこれを呼び出します。
FTPHelper *ftphelper= [[FTPHelper alloc]init];
[ftphelper performSelectorInBackground:@selector(FtpFilesAsyn) withObject:nil];
ユーティリティ クラスでは、独立した静的スレッドを作成します。
if(myThread ==nil)
{
myThread=[[NSThread alloc] initWithTarget:self selector:@selector(SendFtpFile) object:nil];
}
[myThread start];
セレクターのメソッド呼び出しで:
for (Employee *emp in empList)
{
do {
if(isSendingFl==YES)
{
//webserivce call here,
WebService *service=[WebService service];
[service SendFile:self action:@selector(FtpFileHandler:) imagefileStream:outputData filename: ftpFileName];
isSendingFl=YES;
}
} while (isSendingFl);
}
- (void) FtpFileHandler: (id) value {
NSString* result = (NSString*)value;
isSendingFl=NO;
NSLog(@"FtpFile returned the value: %@", result);
}