如何在iOS中从Web服务过滤数据后将数据添加到MutableArray

时间:2015-12-23 12:11:25

标签: ios objective-c uitextfield uitextfielddelegate

我从SOAP webservice获取数据。然后将这些数据添加到一个可变数组中。这是我的肥皂消息代码

SoapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                   "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
                   "<soap:Body>\n"
                   "<GetAirport xmlns=\"http://mobileapi.bbq.uk/\">\n"
                   "<Authkey>%@</Authkey>\n"
                   "<AirportCode>%@</AirportCode>\n"
                   "</GetAirport>\n"
                   "</soap:Body>\n"
                   "</soap:Envelope>\n"
                   ,AuthenticationKey, changewrd];

如果changewrd=@"",则服务返回所有数据。 if changewrd=@"a"然后服务返回从a.for changewrd开始的所有日期我使用textfied.text。所以我想要的是如果用户在文本字段中键入a然后shoud只添加数据从 a开始,如果用户输入,则olny添加数据从开始,而不是数据包含为。 因为有了这个,我想建立自动完成的textfiel。 这意味着当用户输入 a 时,所有名称都应从 a 开始作为代码提示。然后用户从中选择一个。所选文本应显示为textfield.text。通过从第一点过滤,我认为这很容易。如果还有其他任何方式请告诉我。这是我添加数据的方式。

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{

        Session = [NSURLSession sharedSession];
        DataTask = [Session dataTaskWithRequest:TheRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

            if (error) {
                NSLog(@"data task with request error :%@", error);
                return;
            }
            if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
                NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];

                if (statusCode != 200) {
                    NSLog(@"data task with request, HTTP status code :%ld", (long)statusCode);
                    return;
                }
            }

            WebData = [[NSMutableData alloc] init];
            [WebData appendData:data];


            ResultString = [[NSMutableString alloc] initWithData:WebData encoding:NSUTF8StringEncoding];
            TagremovedString = [self stringbyStrippingXml:ResultString];

            NSError *Error;
            ResultData = [TagremovedString dataUsingEncoding:NSUTF8StringEncoding];

            id dictionary = [NSJSONSerialization JSONObjectWithData:ResultData options:kNilOptions error:&Error];

            shortCode = [NSMutableArray array];
            fullAirport = [NSMutableArray array];

            for (NSDictionary *allAirports in dictionary) {

                First *first = [First new];
                first.fullAirport = [allAirports objectForKey:@"Airport"];

                NSLog(@"%@", first.fullAirport);


                [fullAirport addObject:first];

            }

            dispatch_async(dispatch_get_main_queue(), ^{

            });

        }];
        [DataTask resume];

    });

获取所有数据是成功的。没有想法。我一直坚持这个。你的帮助.thanx

1 个答案:

答案 0 :(得分:1)

使用谓词

NSString *alphabet = "textfield text"// searching value

NSPredicate *pred =[NSPredicate predicateWithFormat:@"self.fullAirport beginswith[c] %@", alphabet];
NSArray *filteredArr = [yourArray filteredArrayUsingPredicate:pred];

filteredArr包含所有已过滤的列表