使用发布通知跟踪位置更新是否有效

时间:2016-08-01 08:18:31

标签: ios objective-c cllocationmanager nsnotificationcenter gmsmapview

我们可以使用'发布通知'位置更新,以绘制谷歌地图上的当前位置?或者更好的方式来实现除此之外的其他方式?虽然我不希望将KVO用于@" Mylocations"在谷歌地图。

在LocationTracker.m

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
for(int i=0;i<locations.count;i++)
{
    CLLocation * newLocation = [locations objectAtIndex:i];
    CLLocationCoordinate2D theLocation = newLocation.coordinate;
    CLLocationAccuracy theAccuracy = newLocation.horizontalAccuracy;

    [PlacesDetails sharedInstance].theLocation=theLocation;
    if(newLocation != nil && (!(theLocation.latitude == 0.0 && theLocation.longitude == 0.0)))
    {
        self.myLastLocation = theLocation;
        self.myLastLocationAccuracy= theAccuracy;
// Below implemented the post notification
        [[NSNotificationCenter defaultCenter] postNotificationName:@"updateLocation" object:nil];
    }
}
} 

在ViewController.m中

- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateGMSCameraPostition) name:@"updateLocation"       
object:nil];
}

-(void)updateGMSCameraPostition
{
  NSLog(@"CALLED UPDATELOCATION OBSERVER");
mapView_.camera = [GMSCameraPosition cameraWithTarget:[PlacesDetails sharedInstance].theLocation
                                                 zoom:14];}

1 个答案:

答案 0 :(得分:1)

科班, 这主要取决于您如何设计应用程序。您可以使用不同的模式。

  1. NSNotificationCenter也很好,但您需要在正确的时间删除观察者,如果您不这样做,那么多个通知可以触发并导致您的应用程序出现可怜的行为。
  2. KVO,Willchangevalueforkey,您也可以使用它,但仍然需要非常小心地使用它。这个也很适合衡量变化。
  3. 委托模式,您也可以使用委托模式。
  4. MVVM: - 如果您正在使用MVVM(Modal View-View Modal)设计模式,那么我建议您使用块,这是我最喜欢的方式之一。
  5. 对于块,您可以查看这些链接。

    Blocks Apple Developer

    Blocks RyPress

    Inline Blocks

    我认为它可能对你有所帮助。