データベースからデータを取得し、JSON で Iphone に送信する Web サービスがあります。
マイ Web サービス:
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public string Person()
{
return Helper.Person();
}
私の Helper.cs
public class Helper
{
internal static string Person()
{
List<object> person = new List<object>();
using (SqlConnection con = new SqlConnection(@"Data Source=Localhost\SQLEXPRESS;Initial Catalog=BOOK-IT-V2;Integrated Security=true;"))
using (SqlCommand cmd = new SqlCommand(@"SELECT EMAIL FROM PERSON", con))
{
con.Open();
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
if (rdr["EMAIL"] != DBNull.Value)
{
raumKlassenObject.Add(new {
Email=rdr["EMAIL"].ToString()});
}
}
}
}
return new JavaScriptSerializer().Serialize(person.ToArray());
}
}
Xcode の場合:
#import "RaumklasseViewController.h"
@interface RaumklasseViewController ()
@end
@implementation RaumklasseViewController
@synthesize result;
@synthesize dic;
@synthesize array;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void) sendRequest:(NSString*)jsonText
{
NSURL *url = [[NSURL alloc]initWithString:@"http://ndqqxtsdsdoludwons-entwickludng.de/Webdiendst22/service1.asmx/Raumklasse"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[request setHTTPMethod: @"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *reqData = [NSData dataWithBytes:[jsonText UTF8String] length:[jsonText length]];
[request setHTTPBody:reqData];
NSURLResponse *response =[[NSURLResponse alloc]init];
NSError* error;
result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self sendRequest:@""];
dic = [NSJSONSerialization JSONObjectWithData:result options:kNilOptions error:nil];
self.array= [dic objectForKey:@"d"];
NSMutableArray *finalArray = [[NSMutableArray alloc] init];
for(int n=0; n<[self.array count]; n++)
[finalArray addObject:[[self.array objectAtIndex:n] objectForKey:@"Email"]];
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.array count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text=[array objectAtIndex:indexPath.row];
return cell;
}
@end
これまでのところ動作し、私の出力は次のとおりです。
[{"Email":"abcd@web.de"},{"Email":"acsb@web.de"},{"Email":"asbd@gmx.de"},{"Email":"abcdw@web.de"},{"Email":"absds@web.de"}]
しかし、私が試してみると
self.array = [[dic objectForKey:@"d"] objectForKey:@"Email"];
値のみを取得するには: abcd@web.de、acsb@web.de、asbd@gmx.de など。
だから私はエラーを取得しています:
[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x6a4ccb0.
Webservice が何か間違ったものを返していると思います。、しかし、私は何を知りません。多分あなたは私を助けることができます。
前もって感謝します。