2013-08-29 29 views
5

Tạo "Dự án IOS" trong xcode 5 gây ra những điều sau đây khi khởi chạy cho trình mô phỏng iPad. Ứng dụng hoạt động với cấu hình iPhone. Tôi đã đặt mục tiêu là 5 và sau đó và đã xóa autolayout vì nó không tương thích với ios/xcode 5.setPreferredContentSize lỗi trong ứng dụng ios

Tôi nhận được lỗi sau khi khởi chạy ứng dụng iPad.

2013-08-29 08:53:57.688 IOS Project[350:c07] -[MasterViewController setPreferredContentSize:]: unrecognized selector sent to instance 0x9e2cc20 
2013-08-29 08:53:57.692 IOS Project[350:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MasterViewController setPreferredContentSize:]: unrecognized selector sent to instance 0x9e2cc20' 
*** First throw call stack: 
(0x1cd012 0x14c4e7e 0x2584bd 0x1bcbbc 0x1bc94e 0xbe7b 0x624d36 0x85054a 0x8506c3 0x40871e 0x4089a2 0x407876 0x418cb5 0x419beb 0x40b698 0x1f5fdf9 0x1f5fad0 0x142bf5 0x142962 0x173bb6 0x172f44 0x172e1b 0x40717a 0x408ffc 0x6d3d 0x6ca5) 

Trả lời

3

Trong iOS7, UIViewController có một tài sản preferredContentSize mới. Một dự án thực hiện cho iOS7 có phương pháp sau đây:

- (void)awakeFromNib 
{ 
    self.preferredContentSize = CGSizeMake(320.0, 480.0); 
    [super awakeFromNib]; 
} 

Do đó, gửi một thông điệp setPreferredContentSize: để điều khiển của riêng bạn, không có vấn đề nếu tài sản được thực hiện hay không. Để giải quyết vấn đề này, bạn có thể muốn tránh thiết lập một tài sản đó không tồn tại:

- (void)awakeFromNib 
{ 
    if ([[[UIDevice currentDevice] systemVersion] compare:@"7" options:NSNumericSearch] != NSOrderedAscending) { 
     self.preferredContentSize = CGSizeMake(320.0, 480.0); 
    } 
    [super awakeFromNib]; 
} 
17

mặc dù câu trả lời được chấp nhận là chính xác trong việc xác định vấn đề, tôi sẽ không kiểm tra phiên bản thiết bị cụ thể và thay vào đó sử dụng một cái gì đó như

if ([self respondsToSelector:@selector(setPreferredContentSize:)]) ... 
+0

câu trả lời của bạn đã giúp tôi rất nhiều, ty. – JJ86

2

Nếu bạn muốn duy trì tính tương thích ngược trong ứng dụng, hãy luôn kiểm tra sự tồn tại của các phương pháp mới được giới thiệu trong phiên bản iOS mới hơn. Nếu phương thức không tồn tại trong phiên bản cũ hơn, nó không được gọi. Có một phương pháp respondsToSelector mà bạn có thể biết sự tồn tại của một phương pháp cụ thể.
Vì vậy, trong trường hợp của bạn nếu bạn muốn kiểm tra cho preferredContentSize, bạn có thể làm như thế này:

if ([self respondsToSelector:@selector(preferredContentSize)]) { 
    self.preferredContentSize = CGSizeMake(320.0, 600.0); 
} 
Các vấn đề liên quan