2012-05-12 23 views
12

Tôi đang sử dụng Core Data để hiển thị dữ liệu trong một cái nhìn bảng, nhưng tôi thường xuyên gặp phải vấn đề này:ký Không xác định cho lỗi kiến ​​trúc

ký Không xác định cho kiến ​​trúc i386:
"_OBJC_CLASS _ $ _ NSEntityDescription", tham chiếu từ : objc-đẳng cấp ref trong singleAppDelegate.o objc-đẳng cấp ref trong singleViewController.o "_OBJC_CLASS _ $ _ NSFetchRequest", tham chiếu từ: objc-đẳng cấp ref trong singleViewController.o "_OBJC_CLASS _ $ _ NSFetchedResultsController", tham chiếu từ: objc-class-ref trong singleViewController.o "_OBJC_METACLASS _ $ _ NSManagedObject", tham khảo ced từ: _OBJC_METACLASS _ $ _ Dữ liệu trong Data.o "_OBJC_CLASS _ $ _ NSManagedObject", tham chiếu từ: _OBJC_CLASS _ $ _ Dữ liệu trong Data.o

đây là singleViewController.m tôi

#import "Data.h" 
#import "singleViewController.h" 

@interface singleViewController() 

@end 

@implementation singleViewController 

@synthesize managedObjectContext; 
@synthesize fetchedResultsController = _fetchedResultsController; 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSError *error; 
    if (![[self fetchedResultsController] performFetch:&error]) { 
     // Update to handle the error appropriately. 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     exit(-1); // Fail 
    } 

    self.title = @"Core Data"; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 

    self.fetchedResultsController = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

#pragma mark - Table view data source 

- (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. 
    id sectionInfo = 
    [[_fetchedResultsController sections] objectAtIndex:section]; 
    return [sectionInfo numberOfObjects]; 
} 

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { 
    Data *info = [_fetchedResultsController objectAtIndexPath:indexPath]; 
    cell.textLabel.text = info.title; 
    cell.detailTextLabel.text = info.content; 
} 

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

    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 

    // Configure the cell... 
    [self configureCell:cell atIndexPath:indexPath]; 

    return cell; 
} 

#pragma mark - fetchedResultsController 

- (NSFetchedResultsController *)fetchedResultsController { 

    if (_fetchedResultsController != nil) { 
     return _fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Data" inManagedObjectContext:managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    [fetchRequest setFetchBatchSize:20]; 

    NSFetchedResultsController *theFetchedResultsController = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
             managedObjectContext:managedObjectContext sectionNameKeyPath:nil 
                cacheName:@"Root"]; 
    self.fetchedResultsController = theFetchedResultsController; 
    _fetchedResultsController.delegate = self; 

    return _fetchedResultsController; 

} 

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller { 
    // The fetch controller is about to start sending change notifications, so prepare the table view for updates. 
    [self.tableView beginUpdates]; 
} 


- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { 

    UITableView *tableView = self.tableView; 

    switch(type) { 

     case NSFetchedResultsChangeInsert: 
      [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 
      break; 

     case NSFetchedResultsChangeDelete: 
      [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
      break; 

     case NSFetchedResultsChangeUpdate: 
      [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath]; 
      break; 

     case NSFetchedResultsChangeMove: 
      [tableView deleteRowsAtIndexPaths:[NSArray 
               arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
      [tableView insertRowsAtIndexPaths:[NSArray 
               arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 
      break; 
    } 
} 


- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type { 

    switch(type) { 

     case NSFetchedResultsChangeInsert: 
      [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade]; 
      break; 

     case NSFetchedResultsChangeDelete: 
      [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade]; 
      break; 
    } 
} 


- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { 
    // The fetch controller has sent all current change notifications, so tell the table view to process all updates. 
    [self.tableView endUpdates]; 
} 

@end 

và đây là appdelegate.m tôi

#import "Data.h" 
#import "singleAppDelegate.h" 
#import "singleAppDelegate.h" 

@implementation singleAppDelegate 

@synthesize window = _window; 
@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    Data *data = [NSEntityDescription 
             insertNewObjectForEntityForName:@"Data" 
             inManagedObjectContext:context]; 
    data.title = @"title"; 
    data.content = @"test content"; 

    NSError *error; 
    if (![context save:&error]) { 
     NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
    } 
    return YES; 
} 

và đây là data.m tôi

@implementation Data 

@dynamic title; 
@dynamic content; 

@end 

Không biết có gì sai.

Trả lời

36

Thêm CoreData.framework vào mục tiêu của bạn.

Chọn mục tiêu của bạn, chọn Build Phases và thêm CoreData.framework vào Link Binary With Libraries.

+0

Cảm ơn rất nhiều ... – vijay

Các vấn đề liên quan