2

NSStringをphpファイルに渡す作業を行っています。取得したい結果は、viewDidloadの後にidをphpファイルに渡すことです。これにより、idを使用してmysqlデータベースにクエリを実行し、データを取得できます。誰かが私にそれを行う方法を教えてもらえますか?多くの人がこれらのコードについて以下で議論しているのを見たことがありますが、それが何であるかはよくわかりません。

NSString * myString=@"1";
NSString * post = [[NSString alloc] initWithFormat:@"&id=%@", myString];
NSData * postData = [post dataUsingEncoding:NSASCIIStringEncoding  allowLossyConversion:NO];
NSString * postLength = [NSString stringWithFormat:@"%d",[postData length]];
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://localhost/getdata.php"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection * conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

if (conn) NSLog(@"Connection Successful");

これらのコードは私の場合に機能しますか?あなたの時間と提案をありがとう。

4

1 に答える 1

0

自分のアプリケーションの 1 つに対して同じことを行った方法を次に示します。

*注: これは、POST 要求ではなく GET 要求を実行しますが、バックグラウンドで実行され、効率的に実行されます

サーバーからデータを取得するためのクラスを作成します (私は online.h/m と呼びます)

AppDelegate.h

//
//  AppDelegate.h
//  Faith Life Fellowship Streamer
//
//  Created by David Worth on 7/17/11.
//  Copyright 2011 Math Nerd Productions, LLC. All rights reserved.
//

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : NSObject <UIApplicationDelegate> {
    NSOperationQueue *queue;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet ViewController *viewController;
@property (nonatomic, retain) NSString *receivedURL;

- (void)stringLoad:(NSString*)str;
+ (id)shared;
- (void)addOperation:(NSOperation*)operation;

@end

これらのピースを AppDelegate.m に追加します

@synthesize receivedURL;

static AppDelegate *shared;

+ (id)shared;
{
    if (!shared) {
        [[AppDelegate alloc] init];
    }
    return shared;
}

- (id)init
{
    if (shared) {
        [self autorelease];
        return shared;
    }
    if (![super init]) return nil;

    queue = [[NSOperationQueue alloc] init];
    shared = self;
    return self;
}

- (void)addOperation:(NSOperation *)operation
{
    [queue addOperation:operation];
}

- (void)stringLoad:(NSString *)str
{
    self.receivedURL = str;
    [[NSNotificationCenter defaultCenter] postNotificationName:@"string" object:nil];
}

online.h

//
//  online.h
//  FLF Streamer
//
//  Created by David Worth on 4/30/12.
//  Copyright (c) 2012 Math Nerd Productions, LLC. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "AppDelegate.h"

@interface online : NSOperation

@property (nonatomic, retain) NSString* str;
@property (nonatomic) int type;

- (id)initWithString:(NSString*)url;

@end

online.m

//
//  online.m
//  FLF Streamer
//
//  Created by David Worth on 4/30/12.
//  Copyright (c) 2012 Math Nerd Productions, LLC. All rights reserved.
//

#import "online.h"

@implementation online
@synthesize str;

- (id)initWithString:(NSString *)url
{
    if (![super init]) return nil;
    [self setStr:url];
    return self;
}

- (void)dealloc {
    [str release], str = nil;
    [super dealloc];
}

- (void)main {
    NSString *webpageString = [[[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:str] encoding:NSUTF8StringEncoding error:nil] autorelease];

    [[AppDelegate shared] performSelectorOnMainThread:@selector(stringLoad:)
                                                                         withObject:webpageString
                                                                      waitUntilDone:YES];
}

@end

次に、viewcontroller.mで呼び出します ( mysite.com... をアクセスしたい PHP ページの URL に置き換えます):

online* o = [[online alloc] initWithString:@"http://www.mysite.com/myphppage.php?variable1=blah+blah+blah"];
AppDelegate* delegate = [AppDelegate shared];
[delegate addOperation:o];

そして、あなたのviewcontroller.m viewDidLoad メソッドで:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethodToProcessWhatTheServerReturns) name:@"string" object:nil];

そして、サーバーが返すものを解析するメソッドを viewController.m に作成します。

- (void)myMethodToProcessWhatTheServerReturns
{
     NSString* serverResponse = [AppDelegate shared].receivedURL;
     //Do stuff with serverResponse
}

ハッピーコーディング!

于 2012-09-07T14:39:50.893 に答える