0

我在我的视图控制器中调用方法 doSomething。该方法在我的超类和子类中声明(这些类用于我的 3 个实体 - 1 是其他 2 的父类)。超类被称为 SuperClass (不是真的,而是为了提问)。我为名为 superClass 的类创建了一个实例。

[超类做某事];

该方法返回一个字符串,这个返回的字符串应该是用户在 ViewController 中声明的 UITextField 中输入的文本。我不能让它工作。当一切都包含在 VC 中时,我让它工作正常,但现在我不得不使用实体类,如果超类没有返回值,它会在子类中查找。该属性是要返回的名称。我需要在 headingText (UITextField) 中输入值,让 doSomething (method) 返回存储在 superClass.name 中的值,然后 cell.displayText.text = superClass.name 将显示该值。非常感谢任何和所有帮助!谢谢!

超类.m

#import "SuperClass.h"

@implementation SuperClass

@dynamic name;

-(NSString *)doSomething
{

    return self.name;
}

@end

子类A.m

#import "SubClassA.h"  //SubClassA.h imports SuperClass.h

@implementation SubClassA

@dynamic body;
@dynamic heading;


-(NSString *)doSomething
{
   [super doSomething];

   return self.name;
}

@end

视图控制器.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;

}
4

2 回答 2

1

这是我的最终代码。我将值(属性“名称”)作为参数传递。

- (IBAction)donePressed:(NSString*) name {

    AppDelegate* appDelegate = ( AppDelegate* ) [ [UIApplication sharedApplication]      delegate];

    NSManagedObjectContext *context = [appDelegate managedObjectContext];

    SuperClass *superClass = [NSEntityDescription
                              insertNewObjectForEntityForName:@"SuperClass"
                              inManagedObjectContext:context];

    superClass.name = headingText.text;  //headingText is UITextField on ViewController

    [superClass doSomething]; //doSomething is method in entity class

    NSError *error;
    BOOL success = [self.managedObjectContext save:&error];
    if (!success)
    {
        NSLog(@"%@", [error localizedDescription]);
    }



    [self fetchResults];

    [self.tableView reloadData];


}
于 2012-05-22T06:26:54.683 回答
0

我没有查看你的接口文件,所以我不知道你是否继承了超类,但如果你继承了并且你想重写那个方法,那么你重写同名的方法

[super doSomething]

[super doName]当你的方法名称是doSomething.you 应该覆盖它时,你是如何覆盖 doName的

[super doSomething];

覆盖方法意味着您正在调用具有相同名称而不是子类的超类的方法。

于 2012-05-21T08:45:21.810 回答