我有一个NSMutableArray,我从GPS存储CLLocation对象。问题是当我尝试将我的数组保存到NSData对象以便将其插入sqlite数据库时。 NSData对象具有nil值。直到几天前我的代码工作正常。我认为在xcode更新停止后。我的代码的片段如下:
@interface srTrackMeHome : UIViewController<CLLocationManagerDelegate>{
CLLocationManager *locationManager;
NSMutableArray *myLocations;
}
单击按钮上的.m文件运行以下功能:
- (IBAction)StartTrackMe:(id)sender {
myLocations=[[NSMutableArray alloc]init];
.
.
.
.
.
[locationManager startUpdatingLocation];
}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
.
.
.
.
[myLocations addObject:newLocation];
}
当我完成我的GPS点数收集后,我尝试以下(直到这一点,我可以看到我的数据有数据):
NSData *routePointsFromArray = [NSKeyedArchiver archivedDataWithRootObject:myLocations];`
这里是routePointsFromArray = nil的地方,前几天这个有用。
我错过了什么吗?提前谢谢!
答案 0 :(得分:0)
正如rmaddy指出的那样,看起来你永远不会初始化你的数组,所以你正在把你的位置对象放在地板上#34;。
您需要添加一行来创建数组:
NSMutableArray *myLocations = [NSMutableArray new];
//Now you can create locations
[myLocations addObject:newLocation]; //newLocation comes from locationManager
在Objective-C中,您可以向nil对象发送消息,但它只是无声地失败,所以当您没有创建数组对象时,您的addObject
调用才会被忽略。
答案 1 :(得分:0)
我设法解决了这个问题。即使我在xcode上看到nil值(我真的不知道为什么xcode显示nil值),上面的代码确实保存在数据库我的数组上。问题是我从数据库中检索数据。问题是xcode(我认为)运行“if {} else {}”代码的方式。当我检索数据时,我的代码应仅运行“if”部分但由于某种原因“else”代码也运行。我把我的功能分成了两个新功能。一个管理“if”代码和另一个“else”代码,一切正常。
我真的非常感谢你的时间和答案。
答案 2 :(得分:0)
据我所知,您在myLocations数组中添加了一个对象newLocation。
首先,newLocation是你的自定义模型类,对吧? 请确认,您是否在其上实现了NSCodingProtocol。
其次, 请检查方法didUpdateLocations,得到位置管理员的任何回复?
如果答案为否,请检查您的隐私权限位置是否添加了info.plist文件。