位置+ CoreData - 插入太多行

时间:2014-08-12 13:14:34

标签: ios core-data ios7.1

我尝试使用CoreData框架向SQLite数据库插入位置信息。我在下面复制了部分代码。

这很好用,我看到我可以插入纬度&经度信息没有任何问题。唯一的问题是它插入了太多具有相同纬度经度的行。

我想我错过了一个基本逻辑,但我现在无法看到它。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    locationManager = [[CLLocationManager alloc] init];
}

- (IBAction)BtnGetMyLocationPressed:(UIButton *)sender {

    locationManager.delegate=self;
    locationManager.desiredAccuracy=kCLLocationAccuracyBest;
    locationManager.distanceFilter=kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
    // Delegate Method of CLLocation Manager
    CLLocation *currentLocation = newLocation;

    // Get the Device ID
    UIDevice *device = [UIDevice currentDevice];
    NSString  *currentDeviceId = [[device identifierForVendor]UUIDString];
    // Do something with the Device Information

    MBLAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context =[appDelegate managedObjectContext];

    Locations *newLocationRecord= [NSEntityDescription
                  insertNewObjectForEntityForName:@"Locations"
                  inManagedObjectContext:context];
    newLocationRecord.deviceID = currentDeviceId;
    newLocationRecord.dateUpdate = [NSDate date];
    newLocationRecord.latitudeLoc = [NSNumber numberWithFloat:(currentLocation.coordinate.latitude)];
    newLocationRecord.longitudeLoc = [NSNumber numberWithFloat:(currentLocation.coordinate.longitude)];

    NSError *error;
    [context save:&error];

}

3 个答案:

答案 0 :(得分:0)

如何防止插入相同的纬度&经度?我的意思是,如果你拥有相同的纬度和数量,首先应该在数据库中查找经度然后不插入否则插入行。我希望你不是在寻找核心数据的魔力线: - )

答案 1 :(得分:0)

致电[locationManager stopUpdatingLocation]; after save

答案 2 :(得分:0)

据我所知,您希望将用户的位置保存到数据库中。在这种情况下,您应该跳过旧位置。您可以使用timestamp的{​​{1}}属性来执行此操作。

如果您希望仅在停止位置更新并将位置管理员CLLocation设置为delegate后才接收位置更新。

nil