我是编程新手,我决定开始使用Xcode和Obj-C。
我正在制作一个标签式应用程序,其中第二个视图控制器包含应该缩放到用户位置的地图。我想我只是无法正确获取代码,当我尝试在iOS模拟器中运行应用程序时,它只是在我打开第二个视图控制器时崩溃。
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
在@autoreleasepool中,每次运行都会得到一个“线程1:信号SIGABRT”。
这是我打开第二个视图控制器时得到的输出
2013-08-05 21:31:26.271 placerate[56730:c07] Couldn't find default.styleproto in framework
2013-08-05 21:31:26.277 placerate[56730:c07] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x98a1120> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key mapView.'
*** First throw call stack:
(0x16b3012 0x14d8e7e 0x173bfb1 0xf84e41 0xf065f8 0xf060e7 0xf30b58 0x63a019 0x14ec663 0x16ae45a 0x638b1c 0x4fd7e7 0x4fddc8 0x4fdff8 0x4fe232 0x51f8c9 0x51f704 0x51dbda 0x51da5c 0x51f647 0x14ec705 0x4202c0 0x420258 0x642ff4 0x14ec705 0x4202c0 0x420258 0x4e1021 0x4e157f 0x4e1056 0x646af9 0x14ec705 0x4202c0 0x420258 0x4e1021 0x4e157f 0x4e06e8 0x44fcef 0x44ff02 0x42dd4a 0x41f698 0x2500df9 0x2500ad0 0x1628bf5 0x1628962 0x1659bb6 0x1658f44 0x1658e1b 0x24ff7e3 0x24ff668 0x41cffc 0x22fd 0x2225)
libc++abi.dylib: terminate called throwing an exception
(lldb)
这是“自动”窗格下的输出:
argc = (int)1
argv = (char **)0xbffff3b4
SecondViewController.h:
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface SecondViewController : UIViewController
<MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *mapView;
- (IBAction)zoomIn:(id)sender;
- (IBAction)changeMapType:(id)sender;
@end
SecondViewController.m:
#import "SecondViewController.h"
@interface SecondViewController ()
@end
@implementation SecondViewController
- (IBAction)zoomIn:(id)sender {
MKUserLocation *userLocation = _mapView.userLocation;
MKCoordinateRegion region =
MKCoordinateRegionMakeWithDistance ( userLocation.location.coordinate, 50, 50);
[_mapView setRegion:region animated:NO];
}
- (IBAction)changeMapType:(id)sender {
if (_mapView.mapType == MKMapTypeStandard)
_mapView.mapType = MKMapTypeSatellite;
else
_mapView.mapType = MKMapTypeStandard;
}
- (void)mapView:(MKMapView *)mapView
didUpdateUserLocation:
(MKUserLocation *)userLocation
{
_mapView.centerCoordinate =
userLocation.location.coordinate;
}
- (void)viewDidLoad
{
[super viewDidLoad];
_mapView.showsUserLocation = YES;
_mapView.delegate = self;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
我已经关注了这个问题的教程 - 你可能已经注意到了,这对我来说非常希望。我很乐意提供有关此问题的其他信息。提前谢谢,
亲切的问候 Yngve编辑: 我创建了一个新项目,我回收了一些代码,出于某种原因,它只是起作用。我相信不同的答案和解决方案让我在编程时更加注意。这是我的第一个项目,所以我希望我可能会遇到更多麻烦,谢谢大家花时间回答我的问题。 (我实际上现在发现代码令人兴奋)
答案 0 :(得分:0)
看起来您只需要在故事板的检查器窗格中将第二个视图控制器的类设置为SecondViewController。它仍然设置为股票UIViewController。
答案 1 :(得分:0)
听起来像丢失的styleproto文件可能是个问题,请参阅此SO答案:iOS6 Simulator MKMapKit "Couldn't find default.styleproto in framework"
您使用的是故事板还是NIB?如果是这样,您可能希望看到此SO答案,并确保在IB中设置正确的自定义类:NSInvalidArgumentException isKindOfClass
答案 2 :(得分:0)
对我来说,当你执行这行代码时,mapView将有时在模拟器中抛出异常
_mapView.showsUserLocation = YES;
重新启动Xcode并清除派生数据是在它进入此状态时为我修复的。重置模拟器什么都不做。