간단한지도 앱을 만들고 있습니다 - pubnub 채널에서 위치와 텍스트를 송수신하고 있습니다. 채팅 메시지가 오면 간단한 MKAnnotation을 사용하여 채팅을 그려보고 싶습니다 (저는 이것이 UX의 무시 무시한 행위이며 걱정하지 않는다는 것을 알고 있습니다).iOS - 동적으로 추가 할 때 기본 MKAnnotation이 표시되지 않습니다.
내 응용 프로그램 대리인이 pubnub 채널에서 메시지를 받으면 주 뷰 컨트롤러의 메서드를 호출하여지도에 텍스트 메시지를 그립니다. 이 메소드는 핀의 좌표에 대해 최신 사용자 위치를 사용해야합니다.
왜 그런지 모르겠지만 내 방법 내에서 보여줄 주석을 가져올 수 없습니다. 메서드 내에서 주석을 작성하고 보여 주려고했습니다. 또한 커스텀 어노테이션 클래스를 만들어 내 메소드 내에서 호출 해 보았습니다. 매우 동일한 주석 코드를 사용하지만 내 viewDidLoad에서 하드 코딩하면 잘 나타납니다. 모든 통찰력이 가장 높이 평가 될 것입니다.
내 응용 프로그램 위임은 :
내보기 컨트롤러#import "MyLocationAppDelegate.h"
#import "MyLocationViewController.h"
@implementation MyLocationAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[PubNub setDelegate: self];
return YES;
}
- (void)pubnubClient:(PubNub *)client didReceiveMessage:(PNMessage *)message
{
NSString* text = message.message;
//Call drawChat method of MyLocationViewController
MyLocationViewController *MyLocViewController = [[MyLocationViewController alloc] init];
[MyLocViewController drawChat:text];
}
: 안나의 내가 무엇을하고 있었는지 지적에
#import "MyLocationViewController.h"
#import "MyLocationAppDelegate.h"
#import "MyLocationAnnotation.h"
CLLocation *userLocation;
@implementation MyLocationViewController {
CLLocationManager *locationManager;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//Delegate map view
self.mapView.delegate = self;
[self SetUpChat];
[self configurePubNub];
//Instantiate location manager
if (nil == locationManager) {
locationManager = [[CLLocationManager alloc] init];
}
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
NSLog(@"Application: viewDidLoad");
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
userLocation = [locations lastObject];
}
- (void)drawChat:(NSString *)message
{
//Create new annotation object
CLLocationCoordinate2D location;
location.latitude = userLocation.coordinate.latitude;
location.longitude = userLocation.coordinate.longitude;
MyLocationAnnotation *chat = [[MyLocationAnnotation alloc] initWithLocation:location andTitle:message];
[self.mapView addAnnotation:chat];
}
그리고 MyLocationAnnotation.m
#import "MyLocationAnnotation.h"
@implementation MyLocationAnnotation
- (id)initWithLocation:(CLLocationCoordinate2D)coord andTitle:(NSString *)ttl {
self = [super init];
if (self) {
_coordinate = coord;
_title = ttl;
}
return self;
}
@end
drawChat 메소드를 호출하기 전에 didUpdateLocation이 호출되고 있습니까? 먼저 userLocation을 확인하십시오. –
Thanks Bhumeshwer - drawChat 메서드 내에서 userLocation을 확인했으며 위도와 경도로 올바르게 채워졌습니다. –
didReceiveMessage에서 MyLocationViewController의 새 인스턴스를 만들고 그 인스턴스가 표시 (표시)되지 않습니다. 원본 MyLocationViewController가 생성되고 표시되는 위치는 어디입니까? – Anna