描述核心数据模型:
我的费用跟踪应用程序有一个核心数据模型。我创建了一个名为“Money”的抽象父实体,其属性为“vendor”、“date”、“amount”等。“费用”和“收入”这两个子实体继承自父实体“金钱”。然后还有其他实体,例如“Category”和“subCategory”及其属性。截至目前的总数:我的数据模型中有 5 个实体。
我有从子实体“费用”和“收入”到实体“类别”的关系,而实体“类别”又与实体“子类别”有一对多关系,因为一个类别可以有一个或多个子类别。实体“类别”与实体“费用”和“收入”具有一对多关系,并且可能存在特定类别的费用或收入。到目前为止,这对我来说很有意义。
我有一个表格视图,并使用 NSFetchedResultsController 来填充我的表格视图,其中包含混合 od 费用和收入。
我有一个带有“ExpenseS”和“Income”按钮的警报视图 - 两者都被推送到同一个视图控制器,其中包含诸如填写供应商、金额、类别、子类别和导航栏上的保存按钮等详细信息。
这是我的保存方法:
- (void)saveMoney:(id)sender
{
AppDelegate * applicationDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
NSManagedObjectContext * context = [applicationDelegate managedObjectContext];
_money = (Money*) [NSEntityDescription insertNewObjectForEntityForName:@"Money" inManagedObjectContext:context];
double expenseAmt = [_amountTxtField.text doubleValue];
NSDate *expenseDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@",currentDateLbl.text]];
_money.vendor = vendorTxtField.text;
_money.cat = categoryLbl.text;
_money.subcat = subCategoryLbl.text;
_money.amount = [NSNumber numberWithDouble:expenseAmt];
_money.date = expenseDate;
_money.photo = _templateImgView.templateImage.image;
_money.notes = notesLbl.text;
_money.paidBy = paidResourceLbl.text;
NSError * error = nil;
[context save:&error];
[self.navigationController dismissModalViewControllerAnimated:YES];
}
这将新的费用/收入保存到表格视图中,并且我在表格视图中获得了结果(费用/收入)的混合。但是我怎么知道我的行是支出还是收入。我认为获取请求应该使它工作?但是这个获取请求应该放在哪里,用什么方法呢?我尝试使用以下代码:
AppDelegate * applicationDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; NSManagedObjectContext * context = [applicationDelegate managedObjectContext];
// Retrieve the entity from the local store -- much like a table in a database
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Money" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setIncludesSubentities:YES];
// Set the sorting -- mandatory, even if you're fetching a single record/object
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release]; sortDescriptors = nil;
[sortDescriptor1 release]; sortDescriptor1 = nil;
NSError * error;
NSArray * objects = [context executeFetchRequest:request error:&error];
for (Money* money in objects)
{
NSLog(@"money class");
if([money isKindOfClass:[Expense class]])
{
NSLog(@"expense class");
}
else
{
}
}
[context save:&error];
这从不打印“费用类”,根本不去那里。我不知道这将如何工作以及我将以什么方法放置这个获取请求。
请帮帮我。我会很感激的。
谢谢