-1

NSStringリクエストの URL としてユーザー ID を使用する必要がある場合:

そしてNSMutableArray、上記の呼び出しに一度に 1 つずつキューに入れたいという人がいましたか? したがって、基本的にNSStringからを 3 回呼び出しますNSMutableArray

複数の UITableView セルをチェックでき、完了すると、プッシュされたセル行にインデックスを付けることができます。それが今のところ userIDArray が使用されているものです。userIDArray から返された userID を使用して呼び出しを行いたいと思います。

for (NSDictionary* userIDDict in userIDArray)
{   
    userIDArray = [[NSMutableArray alloc] init]; //I put this line in my viewdidload
    NSNumber* userID = [userIDDict objectForKey:@"UserID"];
}

UserIDArray はNSMutableArray.

これは、NSLog整数NSMutableArrayが 1、2、3 のいずれかになります。

UserID: 1
UserID: 2
UserID: 3

つまり、NSMultiTableArray1、2、および 3 の結果を取得して、次の中で使用したいと考えていNSStringます。

NSString *userProfile = [NSString stringWithFormat:@"http://example.com/userid=1"];

NSString *userProfile = [NSString stringWithFormat:@"http://example.com/userid=2"];

NSString *userProfile = [NSString stringWithFormat:@"http://example.com/userid=3"];

したがって、最初の呼び出しを行って結果を待ち、次に 2 番目、最後に 3 番目の呼び出しを行います。

これはできますか?キューとこれに関するこのリンクを検索しましたが、それらが必要なものかどうかわかりませんか?

UserDetailViewController.h ファイル:

@interface UserDetailViewController : UIViewController <UITableViewDelegate>{

long long expectedLength;
long long currentLength;
UITableView *userTableView;
NSIndexPath* checkedIndexPath;

}

@property (nonatomic, retain) NSArray *userIDJson;
@property (strong, nonatomic) NSDictionary *userIDDict;
@property (nonatomic, retain) NSIndexPath* checkedIndexPath;
@property (nonatomic, strong) NSMutableArray *userIDArray;
@property (nonatomic) NSInteger currentUserIndex;

@end

UserDetailViewController.m ファイル:

@interface UserDetailViewController ()

@end

@implementation UserDetailViewController
@synthesize userIDJson;
@synthesize userIDDict;
@synthesize checkedIndexPath;
@synthesize userIDArray;
@synthesize currentUserIndex;

- (void)viewDidLoad
{
[super viewDidLoad];

userIDArray = [[NSMutableArray alloc] init];

[self.navigationController setNavigationBarHidden:NO];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
//return self.loadedSearches.count;
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.userIDJson.count;
}

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CellIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ;
}

cell.textLabel.text = self.userIDJson[indexPath.row][@"UserName"];

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

if([self.checkedIndexPath isEqual:indexPath])
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}

return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
NSString *userStringIndex = [self.userIDJson objectAtIndex:indexPath.row];
if (thisCell.accessoryType == UITableViewCellAccessoryNone)
{
    thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
    [userIDArray addObject:userStringIndex];
}
else
{
    thisCell.accessoryType = UITableViewCellAccessoryNone;
    [userIDArray removeObject:userStringIndex];

}

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

if (self.currentUserIndex < userIDArray.count) {

NSNumber* userID = [[userIDArray objectForIndex:currentUserIndex]objectForKey:@"UserID"];

//Make the actual request here, and assign the delegate.
NSString *userProfile = [NSString stringWithFormat:@"http://example.com/userid=%@",userID];

self.currentUserIndex++;

NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:userProfile]];

NSString *userResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];

NSURL *url = [[NSURL alloc] initWithString: userProfile];

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];

userIDJson = [NSJSONSerialization JSONObjectWithData:dataURL 
                                            options:kNilOptions
                                              error:&error];
  }

 }

for (userIDDict in userIDArray)
{
    NSNumber* userID = [userIDDict objectForKey:@"UserID"];
    NSLog(@"%@", userID);
    NSArray* userName = [userIDDict objectForKey:@"UserName"]; 
}
4

1 に答える 1

0

NSURLConnectionコンストラクターを介してデリゲートを取ることができますinitWithRequest:delegate:。したがって、呼び出しをそのプロトコルに準拠させるオブジェクトが必要です。それはUIViewController. デリゲートで必要なメソッドの 1 つを使用して、次の要求を起動できます。

たとえば、現在のインデックスを示すプロパティがあるとします。

@property (nonatomic) NSInteger currentUserIndex;

次に、最初のリクエストを発行する場所で、最初のユーザーを呼び出します。一部のデリゲートメソッドでは、connectionDidFinishLoading:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    if (self.currentUserIndex < self.userIDArray.count) {
        NSNumber* userID = [[self.userIDArray objectAtIndex:self.currentUserIndex] objectForKey:@"UserID"];
        self.currentUserIndex++;
        //Make the actual request here, and assign the delegate.
    }
}

もちろん、接続呼び出しが同期的である必要がない場合は、より簡単な方法で行うことができます。

于 2013-05-31T22:42:14.830 に答える