[英]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.