0

我正在使用带有字典数组的 plist 来填充 TableView 和 TableView 中选定单元格(原型单元格)的 DetailView 。当按下按钮时,我想将选定的字典添加到收藏夹选项卡(另一个 TableView)。到目前为止,这是我的代码:

到目前为止在 DetailViewController 中的代码:

-(IBAction)FavoriteButton:(id)sender
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ItemSelected"
                                                    object:selectedObject];


}

到目前为止捕获FavoritesViewController 中的对象的代码:

[[NSNotificationCenter defaultCenter] addObserverForName:@"ItemSelected"
                                                  object:nil
                                                   queue:[NSOperationQueue mainQueue]
                                              usingBlock:^(NSNotification* notif) {
                                              [favoritedObjects release];
                                              favoritedObjects = [[notif object] retain];
                                              [self.tableView reloadData];
                                          }];

//And populate the TableView with the objects:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
 return [favoritedObjects count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Favcell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// Configure the cell...

NSString *cellValue = [favoritedObjects valueForKey:@"Name"];
cell.textlabel.text = cellValue;

return cell;
}

这显示了 20 个单元格,其值来自我按下“添加到收藏夹”按钮的 DetailViewController 中最后一个对象的键值:“名称”。例如,如果我将“Gato Negro”添加到收藏夹,它会在 20 个单元格中显示“Gato Negro”。如果我然后将“Luna”添加到收藏夹中,它会在 FavoritesViewController 的 20 个单元格中将“Gato Negro”替换为“Luna”。那么如何在收藏夹 TableView 中一一显示它们?

以及如何让 NotificationCenter 在应用程序关闭时保存更改,以便下次记住收藏夹?

这似乎是某种地方的沟通问题。

4

1 回答 1

0

您正在发布带有对象的通知selectedObject(我假设是您的字典)。当您收到该通知时,您将使用此对象替换您现有的收藏夹:

favoritedObjects = [[notif object] retain];

所以事实上 favoritedObjects 现在是单个 selectedObject 字典。这本字典可能有 20 个条目,这就是为什么你最终会得到 20 个单元格。

您需要(至少)进行两项更改才能使您的代码正常工作:

  1. 更改上面的那一行以通知对象添加到您的 favoritedObjects 数组(我假设这是一个NSMutableArray),而不是用selectedObject 字典替换favoritedObjects。您还需要创建一次 favoritedObjects 的实例(当您第一次想向其中添加内容时按需创建,例如检查favoritedObjects == nil是否为零,创建一个新的 NSMutableArray,或者在合适的位置创建它,例如viewDidLoad(在在某些时候,您可能还会保存和加载收藏夹,因此将其创建到初始化方法之一无论如何都是一个好主意,即使您还没有准备好持久收藏夹)。

  2. tableView:cellForRowAtIndexPath:使用indexPath传递给您的 实际从您的喜爱对象数组中获取正确的条目。

此外,tableView:cellForRowAtIndexPath:如果没有可出列的单元格,您将缺少创建新单元格的代码。也许您刚刚在这里为您的问题省略了这段代码?如果您没有,则需要添加该代码。

以小写字母开头的方法名称也是一个好主意(-(IBAction)favoriteButton:(id)sender而不是-(IBAction)FavoriteButton:(id)sender,甚至更好-(IBAction)favoriteButtonPressed:(id)sender:),因为这是每个人都希望 Objective-C 方法看起来的样子:)

于 2012-07-15T22:03:20.503 回答