如何让 Apple 的错误“位置”示例工作?

Posted

技术标签:

【中文标题】如何让 Apple 的错误“位置”示例工作?【英文标题】:How to get Apples buggy "Locations" example to work? 【发布时间】:2010-01-15 12:05:16 【问题描述】:

不幸的是,Apple 根本没有测试它的 tutorial。 “位置”演示确实有问题,甚至不存在编辑按钮。我没有错字。首先我没有复制和粘贴,之后,我也尝试复制和粘贴他们的东西。很多相关代码完全丢失了。

他们只是在视图加载时执行此操作,而无需在任何地方创建编辑按钮:

- (void)viewDidLoad 

    [super viewDidLoad];

    // Set the title.
    self.title = @"Locations";

    // Configure the add and edit buttons.
    self.navigationItem.leftBarButtonItem = self.editButtonItem; // WTF?

    addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addEvent)];
    addButton.enabled = NO;
    self.navigationItem.rightBarButtonItem = addButton;

    // Start the location manager.
    [[self locationManager] startUpdatingLocation];

    /*
     Fetch existing events.
     Create a fetch request; find the Event entity and assign it to the request; add a sort descriptor; then execute the fetch.
     */
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];

    // Order the events by creation date, most recent first.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptor release];
    [sortDescriptors release];

    // Execute the fetch -- create a mutable copy of the result.
    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResults == nil) 
        // Handle the error.
    

    // Set self's events array to the mutable array, then clean up.
    [self setEventsArray:mutableFetchResults];
    [mutableFetchResults release];
    [request release];

我浏览了整个教程,到目前为止它工作正常,除了我无法删除单元格,因为他们没有在此处获得编辑按钮。

我尝试用 -viewDidLoad 中的这一行自己解决这个问题:

// Setup the buttons for the navigation bar
editButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editEvent)];
self.navigationItem.leftBarButtonItem = editButton;

但是现在,editEvent 方法的实现应该是什么样子?不幸的是,Core Data 教程中完全没有这些东西。

【问题讨论】:

【参考方案1】:

Apple 的代码很好。尽管editButtonItem 是实例方法而不是只读属性,但点语法仍然有效(因为点语法只是方法调用的简写——通常是访问器)。

【讨论】:

editButtonItem 定义在哪个地方?我查看了 UITableView 和 UITableViewController 的文档。他们都没有定义任何称为“editButtonItem”的东西。此外,此时 xcode 没有自动完成功能。所以它肯定缺少代码。但是,我对此有另一种解决方法;) 我保证它不会丢失。我已经在我的回答中链接到它的文档。 editButtonItem 在 UIViewController 中定义(UITableViewController 是 UIViewController 的子类)。

以上是关于如何让 Apple 的错误“位置”示例工作?的主要内容,如果未能解决你的问题,请参考以下文章

Apple 的 iAd 示例代码抛出错误

Apple App Site Association 文件解析错误

Apple iOS ARKit:“传感器无法提供所需的输入”错误并停止工作

无法让 MapView 放大当前位置 - SWIFT

CloudKit - 完整且完整的错误处理示例

如何使用 Xcode Storyboards 创建 Popovers