簡體   English   中英

以下代碼中的錯誤是什么?

[英]what is the error in this following code?

我是iOS的初學者。 當我在示例項目中使用Core Data時,它給了我一個線程錯誤。

請幫助我解決此錯誤。

這是我的代碼:

-(NSFetchedResultsController*)fetchedResultController{
if (self.fetchedResultController != nil ) {
    return self.fetchedResultController;
}

NSFetchRequest *request = [[NSFetchRequest alloc]init];
NSManagedObjectContext *context = [self managedObjectContext];

NSEntityDescription *entity = [NSEntityDescription insertNewObjectForEntityForName:@"Recepie" inManagedObjectContext:context];

[request setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"recepieName" ascending:YES];

NSArray *sortDescriptorArray = [[NSArray alloc]initWithObjects:sortDescriptor,nil];

request.sortDescriptors = sortDescriptorArray;

self.fetchedResultController = [[NSFetchedResultsController alloc] initWithFetchRequest: request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

self.fetchedResultController.delegate = self;

return self.fetchedResultController;

}

當您使用這樣的點符號引用屬性時

if (self.fetchedResultController != nil ) {
    return self.fetchedResultController;
}

它等效於調用[self fetchedResultController]方法(此屬性的獲取方法)。 當你這樣做,你已經 getter中,因此該方法無限自稱,導致堆棧溢出錯誤

您不應使用點號表示法來獲取屬性值(使用setter即可)。 請使用后備變量

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

您可以嘗試以下代碼嗎?

  -(NSFetchedResultsController*)fetchedResultController{
   if (self.fetchedResultController != nil ) {
        return self.fetchedResultController;
    }

   NSFetchRequest *request = [[NSFetchRequest alloc]init];
   NSManagedObjectContext *context = [self managedObjectContext];

   NSEntityDescription *entity = [NSEntityDescription insertNewObjectForEntityForName:@"Recepie" inManagedObjectContext:context];

   [request setEntity:entity];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"recepieName"  ascending:YES];

    NSArray *sortDescriptorArray = [[NSArray alloc]initWithObjects:sortDescriptor,nil];

    request.sortDescriptors = sortDescriptorArray;

    self.fetchedResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:    request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

    self.fetchedResultController.delegate = self;

    error = nil;

    if (![self.fetchedResultsController performFetch:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

   return self.fetchedResultController;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM