【发布时间】:2015-08-23 19:24:17
【问题描述】:
所以我开始学习 iOS 的 Core Data 并写出了这段代码:
- (void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
id delegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *objectContext = [delegate managedObjectContext];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Album"];
//An array of our sorted Album objects by date in ascending order
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];
NSError *error = nil;
NSArray *fetchedAlbums = [objectContext executeFetchRequest:fetchRequest error:&error];
self.albums = [fetchedAlbums mutableCopy];
[self.tableView reloadData];
}
我的问题是这条线的目的是什么:
id delegate = [UIApplication sharedApplication].delegate;
我知道,对于委托,您需要将特定对象的当前实例传递给委托属性,该属性将该对象设置为另一个对象的委托。我的问题是你什么时候这样做:
id delegate = [UIApplication sharedApplication].delegate;
哪个对象被传递到delegate 属性? sharedApplication 方法返回我假设的应用程序的单例实例,然后您将获得该应用程序的单个实例的 delegate 属性。该委托是指AppDelegate.h/AppDelegate.m 文件中使用的同一委托吗?
如果该委托属性与AppDelegate.h/AppDelegate.m 文件中使用的属性相同,那么在我们通过的viewDidLoad 方法中的AppDelegate.m 文件中不应该有一行代码在委托属性中 AppDelegate.m 的当前实例中,类似于我们为 tableView 所做的:
self.tableView.delegate = self.
我看不到这一行中的 delegate 属性在哪里完成:
id delegate = [UIApplication sharedApplication].delegate;
【问题讨论】:
-
你得到的是委托,而不是设置它。
-
哦,好的,但是什么对象或实例被传递到我们得到的委托属性中?它是 AppDelegate.m 文件的当前实例吗?
标签: ios objective-c delegates uiapplicationdelegate uiapplication