Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 是否使用可能的JSON将自定义注释发送到webView?_Xcode_Json_Webview_Mapkit_Mkannotation - Fatal编程技术网

Xcode 是否使用可能的JSON将自定义注释发送到webView?

Xcode 是否使用可能的JSON将自定义注释发送到webView?,xcode,json,webview,mapkit,mkannotation,Xcode,Json,Webview,Mapkit,Mkannotation,早上好,StackOverflow,在获得自定义注释调用以处理我的“europeMapView”后,我现在需要将用户发送到webView,现在我希望webView根据单击的调用加载一个URL,该URL可能来自JSON文件。我相信我应该使用NSJSONSerialization,尽管我不知道如何实现它 因此,在“europeMapView”中,当单击“Rome”调出按钮时,用户将进入“europeWebView”并加载字符串www.ThingsAboutRome.com 我想我可以只为每个注释创建

早上好,StackOverflow,在获得自定义注释调用以处理我的“europeMapView”后,我现在需要将用户发送到webView,现在我希望webView根据单击的调用加载一个URL,该URL可能来自JSON文件。我相信我应该使用NSJSONSerialization,尽管我不知道如何实现它

因此,在“europeMapView”中,当单击“Rome”调出按钮时,用户将进入“europeWebView”并加载字符串www.ThingsAboutRome.com

我想我可以只为每个注释创建一个webView,但这似乎效率极低。(另外,我不能在飞行中更改网址。)

我也在用故事板

#import "UKFlightsEuropeMap.h"
#import "Annotation.h"



@interface UKFlightsEuropeMap ()

@end

@implementation UKFlightsEuropeMap
@synthesize europeMapView;

//Define the Long and Lat of different European cities.


#define EUROPE_LATITUDE 47.3690;
#define EUROPE_LONGITUDE 8.5380;

#define LONDON_LATITUDE 51.5171;
#define LONDON_LONGITUDE 0.1062;

#define PARIS_LATITUDE 48.8742;
#define PARIS_LONGITUDE 2.3470;

#define BRUSSELS_LATITUDE 50.75;
#define BRUSSELS_LONGITUDE 4.53333;

#define BERLIN_LATITUDE 52.5;
#define BERLIN_LONGITUDE 13.35;

#define MUNICH_LATITUDE 48.1333;
#define MUNICH_LONGITUDE 11.5667;

#define ZURICH_LATITUDE 47.3690;
#define ZURICH_LONGITUDE 8.5380;

#define MILAN_LATITUDE 45.4640;
#define MILAN_LONGITUDE 9.1916;

#define MADRID_LATITUDE 40.4000;
#define MADRID_LONGITUDE -3.6833;

#define ROME_LATITUDE 41.9000;
#define ROME_LONGITUDE 12.5000;

#define LISBON_LATITUDE 38.7000;
#define LISBON_LONGITUDE 9.1833;

#define VIENNA_LATITUDE 48.2088;
#define VIENNA_LONGITUDE 16.3726;

#define THE_SPAN 0.01f;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

[europeMapView setDelegate:self];

// Do any additional setup after loading the view.

//Create my region

MKCoordinateRegion myRegion;

//Set region centre
CLLocationCoordinate2D center;
center.latitude = EUROPE_LATITUDE;
center.longitude = EUROPE_LONGITUDE;

//Set span (zoom level)
MKCoordinateSpan span;
span.latitudeDelta = THE_SPAN;
span.longitudeDelta = THE_SPAN;

myRegion.center = center;
myRegion.span = span;

//Set our region to the europeMapView

[europeMapView setRegion:myRegion animated:YES];


//Annotation

NSMutableArray * locations = [[NSMutableArray alloc] init];
CLLocationCoordinate2D location;
Annotation * myAnn;

//London Annotation

myAnn = [[Annotation alloc] init];
location.latitude = LONDON_LATITUDE;
location.longitude = LONDON_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"London";
myAnn.subtitle = @"London City";


[locations addObject:myAnn];

//Paris Annotation

myAnn = [[Annotation alloc] init];
location.latitude = PARIS_LATITUDE;
location.longitude = PARIS_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Paris";
myAnn.subtitle = @"City of Love";
[locations addObject:myAnn];

//Brussels Annotation

myAnn = [[Annotation alloc] init];
location.latitude = BRUSSELS_LATITUDE;
location.longitude = BRUSSELS_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Brussels";
myAnn.subtitle = @"Brussels";
[locations addObject:myAnn];

//Berlin Annotation

myAnn = [[Annotation alloc] init];
location.latitude = BERLIN_LATITUDE;
location.longitude = BERLIN_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Berlin";
myAnn.subtitle = @"Berlin";
[locations addObject:myAnn];

//Munich Annotation

myAnn = [[Annotation alloc] init];
location.latitude = MUNICH_LATITUDE;
location.longitude = MUNICH_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Munich";
myAnn.subtitle = @"Munich";
[locations addObject:myAnn];

//Zurich Annotation

myAnn = [[Annotation alloc] init];
location.latitude = ZURICH_LATITUDE;
location.longitude = ZURICH_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Zurich";
myAnn.subtitle = @"Zurich";
[locations addObject:myAnn];

//Milan Annotation

myAnn = [[Annotation alloc] init];
location.latitude = MILAN_LATITUDE;
location.longitude = MILAN_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Milan";
myAnn.subtitle = @"Milan";
[locations addObject:myAnn];

//Madrid Annotation

myAnn = [[Annotation alloc] init];
location.latitude = MADRID_LATITUDE;
location.longitude = MADRID_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Madrid";
myAnn.subtitle = @"Madrid";
[locations addObject:myAnn];

//Rome Annotation

myAnn = [[Annotation alloc] init];
location.latitude = ROME_LATITUDE;
location.longitude = ROME_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Rome";
myAnn.subtitle = @"Rome";
[locations addObject:myAnn];

//Lisbon Annotation

myAnn = [[Annotation alloc] init];
location.latitude = LISBON_LATITUDE;
location.longitude = LISBON_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Lisbon";
myAnn.subtitle = @"Lisbon";
[locations addObject:myAnn];

//Vienna Annotation

myAnn = [[Annotation alloc] init];
location.latitude = VIENNA_LATITUDE;
location.longitude = VIENNA_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Vienna";
myAnn.subtitle = @"Vienna";
[locations addObject:myAnn];

//Add the NSMutable Array to the europeMapView.


[self.europeMapView addAnnotations:locations];




}

//Customize the annotation callouts.

-(MKAnnotationView *) mapView:(MKMapView *)europeMapView viewForAnnotation:        (id<MKAnnotation>)annotation { MKPinAnnotationView *MyPin=[[MKPinAnnotationView alloc]     initWithAnnotation:annotation reuseIdentifier:@"current"];
MyPin.pinColor = MKPinAnnotationColorPurple;

UIButton *advertButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
if ([[annotation title] isEqualToString:@"London"]){
    [advertButton addTarget:self action:@selector(LondonClicked:)     forControlEvents:UIControlEventTouchUpInside];        
}

if ([[annotation title] isEqualToString:@"Paris"]){
    [advertButton addTarget:self action:@selector(ParisClicked:)     forControlEvents:UIControlEventTouchUpInside];
}

if ([[annotation title] isEqualToString:@"Brussels"]){
    [advertButton addTarget:self action:@selector(BrusselsClicked:) forControlEvents:UIControlEventTouchUpInside];
}

if ([[annotation title] isEqualToString:@"Berlin"]){
    [advertButton addTarget:self action:@selector(BerlinClicked:) forControlEvents:UIControlEventTouchUpInside];
}

if ([[annotation title] isEqualToString:@"Munich"]){
    [advertButton addTarget:self action:@selector(MunichClicked:) forControlEvents:UIControlEventTouchUpInside];
}

if ([[annotation title] isEqualToString:@"Zurich"]){
    [advertButton addTarget:self action:@selector(ZurichClicked:) forControlEvents:UIControlEventTouchUpInside];
}

if ([[annotation title] isEqualToString:@"Milan"]){
    [advertButton addTarget:self action:@selector(MilanClicked:) forControlEvents:UIControlEventTouchUpInside];
}

if ([[annotation title] isEqualToString:@"Madrid"]){
    [advertButton addTarget:self action:@selector(MadridClicked:) forControlEvents:UIControlEventTouchUpInside];
}

if ([[annotation title] isEqualToString:@"Rome"]){
    [advertButton addTarget:self action:@selector(RomeClicked:) forControlEvents:UIControlEventTouchUpInside];
}

if ([[annotation title] isEqualToString:@"Lisbon"]){
    [advertButton addTarget:self action:@selector(LisbonClicked:) forControlEvents:UIControlEventTouchUpInside];
}

if ([[annotation title] isEqualToString:@"Vienna"]){
    [advertButton addTarget:self action:@selector(ViennaClicked:) forControlEvents:UIControlEventTouchUpInside];
}


MyPin.rightCalloutAccessoryView = advertButton;
MyPin.draggable = NO;
MyPin.highlighted = YES;
MyPin.animatesDrop = TRUE;
MyPin.canShowCallout = YES;


return MyPin;

}

//Show that the detailDisclosure Button has been pressed.

-(void)LondonClicked:(id)sender {
NSLog(@"London Clicked"); 
}
-(void)ParisClicked:(id)sender {
NSLog(@"Paris Clicked");
}
-(void)BrusselsClicked:(id)sender {
NSLog(@"Brussels Clicked");
}
-(void)BerlinClicked:(id)sender {
NSLog(@"Berlin Clicked");
}
-(void)MunichClicked:(id)sender {
NSLog(@"Munich Clicked");
}
-(void)ZurichClicked:(id)sender {
NSLog(@"Zurich Clicked");
}
-(void)MilanClicked:(id)sender {
NSLog(@"Milan Clicked");
}
-(void)MadridClicked:(id)sender {
NSLog(@"Madrid Clicked");
}
-(void)RomeClicked:(id)sender {
NSLog(@"Rome Clicked");
}
-(void)LisbonClicked:(id)sender {
NSLog(@"Lisbon Clicked");
}
-(void)ViennaClicked:(id)sender {
NSLog(@"Vienna Clicked");
}


- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}


@end
非常感谢您抽出时间


尼克。

首先,我建议您将数据格式更改为以下格式:

{
   "london":{
      "link":"http://www.London.co.uk",
      "moredata":"..."
   },
   "paris":{
      "link":"http://www.Paris.fr",
      "moredata":"..."
   }
}
这将表示一个城市及其相关属性。在您的版本中,无法查找特定城市的正确链接

然后,您可以按如下方式解析和访问不同的部分:

NSString *json = @"{\"london\":{\"link\":\"http://www.London.co.uk\",\"moredata\":\"...\"},\"paris\":{\"link\":\"http://www.Paris.fr\",\"moredata\":\"...\"}}";

NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];

NSError *error;

NSDictionary *cities = [NSJSONSerialization JSONObjectWithData:data options:nil error:&error];

NSLog(@"link to london: %@", cities[@"london"][@"link"]);

>> link to london: http://www.London.co.uk

在此之后,您必须为您的webview提供提取的链接。

我不完全理解您的情况:您是否将数据存储在json(文件)中,就像一个位置是一个对象,您可以在其中找到要单击的链接?您可以使用loadRequest:方法更改webview的页面。是的,因此我将把各个站点的URL存储在一个JSON文件中(可通过web地址访问),我只是不知道如何实现一种方法来告诉webview要加载的web地址取决于单击的注释。您的城市是否硬编码?我猜是的,否则你就已经知道如何从JSON加载它们了,对吧?如果它们是硬编码的,您可能需要为它们设置一个密钥,以便可以将硬编码的城市链接到JSON中的城市。你能添加一个JSON的例子吗?谢谢你简洁的回答!我会试一试的。旁注(以防万一):请不要迁移垃圾邮件(re:解锁的iphone可以使用罗杰斯的预付费sim卡吗?)。另外,当您不知道目标站点的常见问题时,不要投票赞成迁移。电话和电话服务问题与您的主题无关。谢谢
NSString *json = @"{\"london\":{\"link\":\"http://www.London.co.uk\",\"moredata\":\"...\"},\"paris\":{\"link\":\"http://www.Paris.fr\",\"moredata\":\"...\"}}";

NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];

NSError *error;

NSDictionary *cities = [NSJSONSerialization JSONObjectWithData:data options:nil error:&error];

NSLog(@"link to london: %@", cities[@"london"][@"link"]);

>> link to london: http://www.London.co.uk