Tôi tương đối mới với Objective-C và tôi đến từ một nền Java, do đó tôi tìm thấy khái niệm về con trỏ và các lỗi biên dịch không giải thích được khá khó khăn.Truy cập thuộc tính trong PrepareForSegue của một UIViewController
Tôi có một lớp thực hiện một đại biểu với phương thức jsonControllerDidLinkedInAuth. Bất cứ khi nào người ủy nhiệm gửi một thông điệp tới lớp này, đi qua chính nó và một (NSURL *) url, tôi đang cố gắng để gán url để một tài sản authUrl, khi điều này hoạt động kết thúc gọi performSegueWithIdentifier, mà trong thực thi lần lượt các preparForSegue (theo như sự hiểu biết của tôi về điều này là có liên quan).
này dường như không làm việc, như tôi nhận được:
App [3278: 13.517] * Chấm dứt ứng dụng do ngoại lệ còn tự do 'NSInvalidArgumentException', lý do: '- [UINavigationController setUrlAddress :]: chọn không được công nhận gửi đến dụ 0x6acab00'
thông báo lỗi chấm dứt các ứng dụng với SIGABRT.
Cả hai phương thức đều nằm trong cùng một lớp, là một UINavigationController và trỏ đến một UINavigationController khác. Trình biên dịch chỉ cho tôi số [vc setUrlAddress:self.authUrl];
của phương pháp thứ hai.
- (void)jsonControllerDidLinkedInAuth:(JsonController *)controller :(NSURL *)url {
authUrl = url;
if (authUrl != nil) {
[self performSegueWithIdentifier:@"LinkedInAuth" sender:self];
} else {
NSLog(@"Auth URL is null");
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"LinkedInAuth"]) {
// Get destination view
LinkedInViewController *vc = [segue destinationViewController];
NSLog(@"The auth url from prepareForSegue in SignupViewControlle: %@", self.authUrl);
[vc setUrlAddress:self.authUrl];
}
}
Có vẻ như vấn đề là vì một lý do nào đó tôi không thể truy cập thuộc tính authUrl của lớp tôi hiện đang ở. Tôi đã thử với authUrl, [self authUrl] và self.authUrl nhưng không ai trong số này dường như thực hiện công việc. Thuộc tính được tổng hợp, nhưng tôi cũng đã nhận thấy một chút gợi ý: "UINavigationController setUrlAddress", đây không phải là LinkedInViewController như được định nghĩa trong phương thức trên? Tôi đã cố gắng đúc (LinkedInViewController) [segue destinationViewController], nhưng sau đó tôi nhận được một thông báo thông báo cho tôi rằng bạn không thể cast lên một con trỏ.
Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn vì đã đọc.
Chỉnh sửa 1: NSLog ngay phía trên hàm setUrlAddress trả về self.authUrl. Tôi giả định nó phải là một vấn đề tầm nhìn nào đó, nhưng tôi không chắc cách giải quyết vấn đề này.
Cảm ơn bạn, điều này hoạt động như một sự quyến rũ!Ngoài ra, tin nhắn của bạn đã lưu cho tôi rất nhiều gỡ lỗi vì có rất ít ViewControllers khác sẽ hoạt động theo cách tương tự. –
Bạn được chào đón. Xem câu trả lời cập nhật của tôi cho một cách dễ dàng để truy cập vào bộ điều khiển xem mà bạn quan tâm mà không cần phải cast mỗi lần. –