模拟器找不到位置
Posted
技术标签:
【中文标题】模拟器找不到位置【英文标题】:Simulator not getting location 【发布时间】:2011-06-30 22:36:54 【问题描述】:我正在关注 this tutorial 以了解 Core Data。我目前在第 4 节,添加事件。在第 2 节中,教程说添加按钮将在模拟器提示我获取我的位置后几秒钟内变为活动状态,但它从未变为活动状态,知道会发生什么吗?
PS:如果我在获取位置之前将按钮硬编码为活动状态,则会收到以下错误:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 0 beyond bounds for empty array'
在下面一行:
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
编辑:发布更多代码以获得更大的图片
- (void)viewDidLoad
[super viewDidLoad];
self.title = @"Locations";
self.navigationItem.leftBarButtonItem = self.editButtonItem;
addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addEvent)];
addButton.enabled = NO;
self.navigationItem.rightBarButtonItem = self.addButton;
[[self locationManager] startUpdatingLocation];
eventsArray = [[NSMutableArray alloc] init];
这是我得到错误的方法:
-(void)addEvent
CLLocation *location = [locationManager location];
if(location)
return;
Event *event = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:managedObjectContext];
CLLocationCoordinate2D coordinate = [location coordinate];
event.latitude = [NSNumber numberWithFloat:coordinate.latitude];
event.longitude = [NSNumber numberWithFloat:coordinate.longitude];
event.creationDate = [NSDate date];
NSError *error;
if (![managedObjectContext save:&error])
[eventsArray insertObject:event atIndex:0];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
还有我的 appDidLaunch 方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];
navigationController = [[UINavigationController alloc] init];
NSManagedObjectContext *context = [self managedObjectContext];
if(!context)
rootViewController.managedObjectContext = context;
[self.navigationController pushViewController:rootViewController animated:NO];
[rootViewController release];
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
【问题讨论】:
【参考方案1】:您发布的代码中没有NSMutableArray
。错误的问题是您正试图访问一个空的NSMutableArray
中的对象(在索引0
)。找到那个数组,你可能会发现问题。
【讨论】:
我用 viewDidLoad 中的其他相关方法更新了我的代码,我在其中分配了 NSMutableArray,它是我的 RootViewController 的一个属性【参考方案2】:你没有得到一个 CLLocation 对象。在 addEvent 方法的第三行你有 if(location) 返回 所以基本上每次您从 CLLocation *location = [locationManager location]; 成功获取位置对象时您只需返回而不执行该方法的其余部分。
【讨论】:
以上是关于模拟器找不到位置的主要内容,如果未能解决你的问题,请参考以下文章