Chúng tôi đã nhận được dự án HUGE từ gia công phần mềm mà chúng tôi đang cố gắng "sửa chữa". Có hàng trăm bộ điều khiển xem trong dự án. Mục tiêu của chúng tôi là dễ dàng xác định lớp mà chúng tôi hiện đang xem trên thiết bị.Ghi tên lớp của tất cả UIViewControllers trong một dự án
Giải pháp của chúng tôi (không hoạt động, do đó câu hỏi SO) sau.
Override phương pháp viewDidAppear của UIViewController qua một thể loại với điều này:
-(void)viewDidAppear:(BOOL)animated
{
NSLog(@"Current View Class: %@", NSStringFromClass(self.class));
[self viewDidAppear:animated];
//Also tried this:
//[super viewDidAppear:animated];
}
Thể loại này sẽ được đưa vào .pch của dự án.
Điều này sẽ không yêu cầu thêm mã để đưa vào hàng trăm bộ điều khiển chế độ xem và dễ dàng bật và tắt. Nó đã không làm việc vì, như chúng ta đã học được bây giờ, < meme> ta không chỉ đơn giản là ghi đè lên một phương pháp hiện qua loại < /meme>.
Chúng ta đang thiếu gì?!?
Mã này có vòng lặp vô hạn phải không?Bạn nên gọi [super viewDidAppear: animated]; –
@BrunoDomingues vì đây là danh mục trên UIViewController, gọi super sẽ gọi viewDidAppear trên NSObject (lớp cha của UIViewController) không tồn tại. – adamweeks
Bạn có thể tìm thấy chế độ xem hiển thị hiện tại (xem bộ điều khiển) từ UIWindow rootViewController. – 9dan