我有两个视图控制器(DatePickerViewController
和RouteHistoryViewController
)。我在DatePickerViewController
中也有服务器响应。如何将该响应传递给RouteHitoryViewController
。 RouteHistoryViewController
有地图视图。
以下是代码DatePicker.m
:
#import "DatePickerViewController.h"
#import "MapAnnotation.h"
@interface DatePickerViewController ()
@end
@implementation DatePickerViewController
{
//#define URL @"http://140e3087.ngrok.com"
#define URL3 @"http://784effb4.ngrok.com/bustracking/json/student/route_history"
NSString *formatedDate;
NSString *lat;
NSString *longi;
NSString *server_created_date;
}
@synthesize appDelagate,datePicker;
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"%@", appDelegate);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
formatedDate = [dateFormatter stringFromDate:self.datePicker.date];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)sendPicker:(id)sender;
{
[self sendDataToServer : @"GET"];
// NSLog(@"%@", formatedDate);
//self.selectedDate.text =formatedDate;
}
-(void) sendDataToServer : (NSString *) method{
NSString *beaconiD = @"EC112729B51B";
NSString *trackerID = @"e61078a67e4233ad";//appDelagate.tracker_id;
NSString *date = formatedDate;
NSMutableURLRequest *request = nil;
NSString *getURL = [NSString stringWithFormat:@"%@?beacon_id=%@&tracker_id=%@&date=%@", URL3, beaconiD, trackerID, date];
getURL = [getURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString: getURL];
request = [NSMutableURLRequest requestWithURL:url];
NSLog(@"link: %@", getURL);
[request setHTTPMethod:@"GET"];
[request addValue: @"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
NSLog(@"connection: %@", connection);
if( connection )
{
mutData = [NSMutableData new];
}
else
{
NSLog (@"NO_CONNECTION");
return;
}
}
#pragma mark NSURLConnection delegates
-(void) connection:(NSURLConnection *) connection didReceiveResponse:(NSURLResponse *)response
{
[mutData setLength:0];
}
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[mutData appendData:data];
}
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog (@"NO_CONNECTION");
return;
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// NSString *jsonresultString =[jsonresultDict objectForKey:@"result"];
// NSLog(@"%@", jsonresultString);
// //serverResponse.text = jsonresultString;
NSError *error = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:mutData options:kNilOptions error:&error];
NSArray *fetchedArr = [json objectForKey:@"result"];
for (NSDictionary *user in fetchedArr)
{
lat = [user objectForKey:@"latitude"];
longi = [user objectForKey:@"longitude"];
server_created_date = [user objectForKey:@"server_created_date"];
NSLog(@"Item date&time : %@", server_created_date);
NSLog(@"Item longitude : %@", longi);
NSLog(@"Item latitude : %@", lat);
}
}
以下是代码RouteHistory.m
:
#import "RouteHistoryViewController.h"
#import "MapAnnotation.h"
@interface RouteHistoryViewController ()
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@end
@implementation RouteHistoryViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.mapView.delegate = self;
//[self.mapView removeAnnotations:self.mapView.annotations];
MapAnnotation *mapPoint = [[MapAnnotation alloc] init];
mapPoint.coordinate = CLLocationCoordinate2DMake([self.appDelagate.latitude doubleValue], [self.appDelagate.longitude doubleValue]);
mapPoint.title = self.appDelagate.name;
mapPoint.time = self.appDelagate.server_created_date;
mapPoint.mapimage = self.appDelagate.image;
// Add it to the map view
[self.mapView addAnnotation:mapPoint];
// Zoom to a region around the pin
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(mapPoint.coordinate, 500, 500);
[self.mapView setRegion:region];
//testing
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveTestNotification:)
name:@"MapUpdate"
object:nil];
// Do any additional setup after loading the view.
}
#pragma mark - MKMapViewDelegate
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
MKPinAnnotationView *view = nil;
static NSString *reuseIdentifier = @"MapAnnotation";
// Return a MKPinAnnotationView with a simple accessory button
view = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIdentifier];
if(!view)
{
view = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
view.canShowCallout = YES;
view.animatesDrop = YES;
}
return view;
}
使用prepareforsegue
路由历史记录的datepicker- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier]isEqualToString:@"b"])
{
RouteHistoryViewController *rh = segue.destinationViewController;
NSLog(@"%@", rh);
}
}
答案 0 :(得分:1)
在此行之后的connectionDidFinishLoading中的第一个视图控制器
NSArray *fetchedArr = [json objectForKey:@"result"];
添加以下两行
_responseFromServer = fetchedArr;
[self performSegueWithIdentifier:@"segueToRouteHistory" sender:self];
然后在第一个View Controller中添加此方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"segueToRouteHistory"])
{
RouteHistoryViewController *routeHistoryController = [segue segueToRouteHistory];
[routeHistoryController setFetchedArray:_responseFromServer];
}
}
在First View Controller .h文件中添加此
@property NSArray *responseFromServer;
现在我们已将从服务器接收的Response数组分配给目标视图控制器中的对象。
不要忘记添加
@property NSArray *fetchedArray;
在你的第二个ViewController的.h文件
中现在您可以在第二个视图控制器中访问此数组。 PS:不要忘记将故事板中的segue从第一个视图控制器提供给第二个视图控制器,并将Segue Identifier命名为“segueToRouteHistory”