1

我是编程新手,我决定从使用 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

第二视图控制器.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

编辑:我创建了一个新项目,并回收了一些代码,出于某种原因它只是工作。我相信不同的答案和解决方案让我在使用编程时更加注意。这是我的第一个项目,所以我希望我可能会遇到更多麻烦,谢谢大家花时间回答我的问题。(实际上我现在发现代码令人兴奋)

  • 英维
4

3 回答 3

0

听起来缺少 styleproto 文件可能是问题所在,请参阅这个 SO 答案:iOS6 Simulator MKMapKit "Couldn't find default.styleproto in framework"

您使用的是故事板还是 NIB?如果是这样,您可能希望看到这个 SO 答案并确保在 IB 中设置正确的自定义类:NSInvalidArgumentException isKindOfClass

于 2013-08-05T22:19:38.367 回答
0

看起来您只需要在情节提要的检查器窗格中将第二个视图控制器的类设置为 SecondViewController 。它仍然设置为股票 UIViewController。

于 2013-08-05T20:08:53.557 回答
0

对我来说mapView有时会在你执行这行代码时在模拟器中抛出异常

_mapView.showsUserLocation = YES;

重新启动 Xcode 并清除派生数据是当它进入这种状态时为我修复它的方法。重置模拟器什么都不做。

于 2017-01-24T07:47:25.517 回答