0

我有一个 Web 服务,它从数据库中选择数据并将它们以 JSON 格式发送到 Iphone

我的网络服务:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
       [WebMethod]
       public string Person()
       {
           return Helper.Person();
       }

我的助手.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.

我认为 Web 服务返回了一些错误。,但我不知道是什么。也许你可以帮助我。

先感谢您。

4

2 回答 2

2

问题在于:

[dic objectForKey@"d"]

返回一个字典数组。无法使用 objectForKey 访问数组,就像您在此处尝试的那样:

// the second objectForKey message is being sent to the array returned by the first objectForKey
[[dic objectForKey:@"d"] objectForKey:@"Email"];

但是, valueForKey 确实适用于数组并返回一个新数组,该数组是通过对数组的每个元素调用 valueForKey 产生的:

NSArray *objects = [dict objectForKey:@"d"];
NSArray *emails = [objects valueForKey:@"Email"];

这将为您提供字典数组中的所有电子邮件地址。

于 2012-06-05T17:02:34.653 回答
0

您有一个字典数组,每个字典中有一个键 ( "Email")。

objectForKey:是一种返回字典中键的对象的方法。

您不能在您接收的数组上调用此方法,[dic objectForKey:@"d"]因为此方法不适用于数组。

而是objectAtIndex:像这样使用:

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"]];

一旦完成,运行finalArray将只包含一个电子邮件地址字符串数组。

于 2012-06-05T17:00:44.497 回答