View ControllerでdoSomethingメソッドを呼び出しています。メソッドはスーパー クラスとサブ クラスで宣言されています (これらのクラスは 3 つのエンティティ用です - 1 は他の 2 の親です)。スーパークラスは SuperClass と呼ばれます (実際にはそうではありませんが、質問のために)。superClass というクラスのインスタンスを作成しました。
[superClass doSomething];
このメソッドは文字列を返します。返されるこの文字列は、ViewController で宣言された UITextField にユーザーが入力したテキストであると想定されています。これを機能させることはできません。すべてが VC に含まれていたときは問題なく動作していましたが、スーパークラスから値が返されない場合はサブクラスを参照するエンティティ クラスを使用する必要があります。属性は返される名前です。見出しテキスト (UITextField) に値を入力し、doSomething (メソッド) にその値を superClass.name に格納して返させる必要があります。その後、cell.displayText.text = superClass.name にその値が表示されます。すべてのヘルプは非常に高く評価されています! ありがとう!
SuperClass.m
#import "SuperClass.h"
@implementation SuperClass
@dynamic name;
-(NSString *)doSomething
{
return self.name;
}
@end
SubClassA.m
#import "SubClassA.h" //SubClassA.h imports SuperClass.h
@implementation SubClassA
@dynamic body;
@dynamic heading;
-(NSString *)doSomething
{
[super doSomething];
return self.name;
}
@end
ViewController.m
- (IBAction)donePressed:(id)sender {
AppDelegate* appDelegate = ( AppDelegate* ) [ [UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
SuperClass *superClass = [NSEntityDescription
insertNewObjectForEntityForName:@"SuperClass"
inManagedObjectContext:context];
superClass.name = headingText.text; //headingText is UITextField
NSString *fromDoSomething = [superClass doSomething];
// I'm missing something here!
[superClass doSomething];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%s",__FUNCTION__);
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.textLabel.font = [UIFont systemFontOfSize:19.0];
}
NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
SuperClass *superClass = (SuperClass *)object;
superClass.name = superClass.doSomething;
cell.textLabel.text = superClass.name;
return cell;
}