我一直在努力将一个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");
这些代码对我的案子有效吗?谢谢你的时间和建议。
下面是我为自己的一个应用程序做同样事情的方法:
*注意:这会运行GET请求,而不是POST请求,但它会在后台执行并高效运行
创建一个类来从服务器上进行数据检索(我称之为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];
}
在线.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
在线.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中,调用它(用您要访问的PHP页面的URL替换mysite.com):
online* o = [[online alloc] initWithString:@"http://www.mysite.com/myphppage.php?variable1=blah+blah+blah"];
AppDelegate* delegate = [AppDelegate shared];
[delegate addOperation:o];
在viewcontroller.mviewDidLoad方法中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethodToProcessWhatTheServerReturns) name:@"string" object:nil];
然后在viewController.m中创建一个方法,解析服务器返回的内容:
- (void)myMethodToProcessWhatTheServerReturns
{
NSString* serverResponse = [AppDelegate shared].receivedURL;
//Do stuff with serverResponse
}
快乐编码!