0

こんにちは、私は xcode にかなり慣れていません。なぜこのエラー「宣言されていない識別子の使用」が発生するのかを理解するのに苦労しています。基本的に、フェッチした結果をテーブル ビューに返そうとしています。

//  UNBSearchBooksViewController.m

#import "UNBSearchBooksViewController.h"
#import "NBAppDelegate.h"

@interface UNBSearchBooksViewController ()

@end

@implementation UNBSearchBooksViewController 

@synthesize booksSearchBar;
@synthesize searchTableView;
@synthesize fetchedResultsController, managedObjectContext;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // NSFetchRequest needed by the fetchedResultsController
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    // NSSortDescriptor tells defines how to sort the fetched results
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    // fetchRequest needs to know what entity to fetch
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"BookInfo" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];   
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [fetchedObjects count];
}

// Customize the appearance of table view cells.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *CellIdentifier = @"Cell" ;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Configure the cell "this is where my problem is" use of undeclared identifier
    BookInfo *info = [self.fetchedResultsController objectAtIndexPath:indexPath];

    cell.textLabel.text = info.title;

    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

}

- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar
{

    if (self.booksSearchBar.text !=nil)
    {
        NSPredicate *predicate =[NSPredicate predicateWithFormat:@"bookName contains[cd] %@", self.booksSearchBar.text];
        [fetchedResultsController.fetchRequest setPredicate:predicate];
    }
    else
    {
        NSPredicate *predicate =[NSPredicate predicateWithFormat:@"All"];
        [fetchedResultsController.fetchRequest setPredicate:predicate];
    }

    NSError *error = nil;
    if (![[self fetchedResultsController] performFetch:&error])
    {
        // Handle error
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        exit(-1);  // Fail
    }

    fetchedObjects = fetchedResultsController.fetchedObjects;

    [booksSearchBar resignFirstResponder];

    [searchTableView reloadData];   
}

- (void) searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    searchBar.showsCancelButton = YES;
}

- (void) searchBarTextDidEndEditing:(UISearchBar *)searchBar

{
    searchBar.showsCancelButton = NO;
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];
}
- (void)didReceiveMemoryWarning
{

    [super didReceiveMemoryWarning];


}
- (void)viewDidUnload
{
    [super viewDidUnload];

}
@end
4

1 に答える 1

1

問題は、基本クラスとして入力された結果を特定のサブクラスに割り当てていることです。あなたが述べたように、これはあなたが警告を得る場所です:

BookInfo *info = [self.fetchedResultsController objectAtIndexPath:indexPath];

「NSFetchedResultsController」は、タイプ「id」のオブジェクトを返します

- (id)objectAtIndexPath:(NSIndexPath *)indexPath

(そして NSManagedObject * も返すことができると思います)が、それを BookInfo オブジェクトに割り当てます。ここには不一致があるため、戻り値を既知のものにキャストする必要があります。

BookInfo *info = (BookInfo *)[self.fetchedResultsController objectAtIndexPath:indexPath];

そしてあなたの警告は消えます。

于 2012-09-24T21:42:21.250 に答える