我尝试使用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];
}
答案 0 :(得分:0)
如何防止插入相同的纬度&经度?我的意思是,如果你拥有相同的纬度和数量,首先应该在数据库中查找经度然后不插入否则插入行。我希望你不是在寻找核心数据的魔力线: - )
答案 1 :(得分:0)
致电[locationManager stopUpdatingLocation]; after save
答案 2 :(得分:0)
据我所知,您希望将用户的位置保存到数据库中。在这种情况下,您应该跳过旧位置。您可以使用timestamp
的{{1}}属性来执行此操作。
如果您希望仅在停止位置更新并将位置管理员CLLocation
设置为delegate
后才接收位置更新。
nil