Ios 我的自定义委托没有';行不通

Ios 我的自定义委托没有';行不通,ios,objective-c,delegates,Ios,Objective C,Delegates,我在两个类之间使用委托,以便在有任何更新或需要添加对象时得到通知。第一个类是UITableViewController的子类,第二个类是UIViewController的子类。第一个类有一个加号(addButton)将对象添加到它的表视图中。第二个类是第一个类在按下add按钮时导航到的视图。因此,在视图控制器类中,我在.h文件中添加了一个协议: @protocol ViewControllerDelegate <NSObject> - (void) addViewControlle

我在两个类之间使用委托,以便在有任何更新或需要添加对象时得到通知。第一个类是UITableViewController的子类,第二个类是UIViewController的子类。第一个类有一个加号(addButton)将对象添加到它的表视图中。第二个类是第一个类在按下add按钮时导航到的视图。因此,在视图控制器类中,我在.h文件中添加了一个协议:

@protocol ViewControllerDelegate <NSObject>

- (void) addViewControllerDelegate:(ViewController *)controller didUpdateEvent:(Event *) event;

@end
现在回到表视图控制器类,在我添加的.h文件和.m文件中,我添加了以下方法:

- (void) addViewControllerDelegate:(ViewController *)controller didUpdatEvent:(Event *)event{
    [self saveNewEntry:event];
    NSLog(@"DELEGATE");
}
问题:它不工作。虽然我想我做了所有该做的事

注意:我在这里更改了类的名称,所以没有将我的类命名为ViewController。 saveNewEntry用于将事件对象添加到我的数组中,nslog就在那里,以便知道它是否输入了方法

//----------------------------------更实际的代码------------------------------ 第二类(视图控制器).h和.m

@class Course;
@class SSAddViewController;

@protocol SSAddViewControllerDelegate;

@interface SSAddViewController : UIViewController <UITextFieldDelegate>
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (weak, nonatomic) id <SSAddViewControllerDelegate> delegate;
@end

@protocol SSAddViewControllerDelegate <NSObject>

- (void) addViewControllerDelegate:(SSAddViewController *)controller didUpdateCourse:(Course *) course;

@end
@class Course;
@class SSAddViewController;

@protocol SSAddViewControllerDelegate;

@interface SSAddViewController : UIViewController <UITextFieldDelegate>
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (weak, nonatomic) id <SSAddViewControllerDelegate> delegate;
@end

@protocol SSAddViewControllerDelegate <NSObject>

- (void) addViewControllerDelegate:(SSAddViewController *)controller didUpdateCourse:(Course *) course;

@end

- (void) saveNewEntry
{
    SSAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    Course *course = (Course *) [NSEntityDescription insertNewObjectForEntityForName:@"Course" inManagedObjectContext:context];
    NSLog(@"YES");
    [course setCourseName:self.nameTextField.text];
    [course setCourseCredits:[NSNumber numberWithInt:[self.creditstextField.text intValue]]];
    [course setCourseChapters:[NSNumber numberWithInt:[self.chaptersTextField.text intValue]]];

    if (hasChanges) {
        [self.delegate addViewControllerDelegate:self didUpdateCourse:course];
    }
}
@课堂课程;
@SSAddViewController类;
@协议SSAddViewControllerDelegate;
@接口SSAddViewController:UIViewController
@属性(非原子,保留)NSManagedObjectContext*managedObjectContext;
@属性(弱、非原子)id委托;
@结束
@协议SSAddViewControllerDelegate
-(void)addViewControllerDelegate:(SSAddViewController*)控制器didUpdateCourse:(课程*)课程;
@结束
@班级课程;
@SSAddViewController类;
@协议SSAddViewControllerDelegate;
@接口SSAddViewController:UIViewController
@属性(非原子,保留)NSManagedObjectContext*managedObjectContext;
@属性(弱、非原子)id委托;
@结束
@协议SSAddViewControllerDelegate
-(void)addViewControllerDelegate:(SSAddViewController*)控制器didUpdateCourse:(课程*)课程;
@结束
-(作废)保存新条目
{
SSAppDelegate*appDelegate=[UIApplication sharedApplication]。委托;
NSManagedObjectContext*上下文=[appDelegate managedObjectContext];
课程*课程=(课程*)[NSEntityDescription insertNewObjectForEntityForName:@“课程”在托管对象上下文:上下文中];
NSLog(@“是”);
[课程设置CourseName:self.nameTextField.text];
[课程设置CourseCredits:[NSNumber numberWithInt:[self.creditstextField.text intValue]];
[课程设置CourseChapters:[NSNumber numberWithInt:[self.chaptersTextField.text intValue]];
如有更改{
[self.delegate addViewControllerDelegate:self-didUpdateCourse:course];
}
}
第一类(表视图).h和.m分别为:

@interface SSCoursesViewController : UITableViewController <SSAddViewControllerDelegate>




- (void) addViewControllerDelegate:(SSAddViewController *)controller didUpdateCourse:(Course *)course{
    [self saveNewEntry:course];
    NSLog(@"DELEGATE");
}
@interface SSCourseViewController:UITableViewController
-(void)addViewControllerDelegate:(SSAddViewController*)控制器didUpdateCourse:(课程*)课程{
[自救新条目:课程];
NSLog(“代表”);
}

您是否确实在代码中设置了SSADVIEWCONTROLLERGATE=self

您的SSAddViewController是在哪里创建的?您是将segue用作故事板的一部分,还是直接创建

如果您使用的是segue,则需要在SSCoursesViewController中实现prepareForSeque

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    SSAddViewController *ssavc = (SSAddViewController *)[segue destinationViewController];

    ssavc.delegate = self;

}
如果直接创建SSAddViewController,则可以直接进行设置


我现在没有坐在Mac电脑前,但上面的代码大致正确。

您设置过代理吗?您是指我添加的代理吗?@property委托?是的,您需要在代码中的某个地方将其设置为某个值,否则,将不会发生任何事情。我输入了[self.delegate addViewController:self-diddupdateevent:event]这就是您设置它的意思吗?事实上,我甚至不知道如何将委托设置为除此之外的任何内容。顺便说一句,我检查了实用程序模板,我的代码与之类似。唯一使用委托的时间与我的案例相同(与我在上一条评论中发布的时间相同)mm..不,你指的是什么委托>我作为id键入的委托?@user1938695他的意思是,你是否将视图控制器的
delegate
属性设置为某个值?哦,不,我没有。如果我是,我需要这样做吗?是塞特吗?是的,SSAddViewController是一个视图控制器,由模态序列创建。我试试看。
@interface SSCoursesViewController : UITableViewController <SSAddViewControllerDelegate>




- (void) addViewControllerDelegate:(SSAddViewController *)controller didUpdateCourse:(Course *)course{
    [self saveNewEntry:course];
    NSLog(@"DELEGATE");
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    SSAddViewController *ssavc = (SSAddViewController *)[segue destinationViewController];

    ssavc.delegate = self;

}