ios两种方式自定义委托

时间:2015-01-21 04:49:52

标签: ios objective-c multithreading delegates

我有两个班级AB。我有一次删除操作将变量从A传递到B。我尝试让另一位代表从B转到A,以便我可以从A控制B。我试图创建另一个委托,但它不起作用。由于我已经在B.h中导入A.h,我无法在A.h.中导入B.h.我该怎么做才能设置两种方式自定义委托?

A.H

@protocol SoundDetectDelegate <NSObject>
-(void)update_from_sound: (SKSpriteNode*) node;
@end
@interface SoundDetect : NSObject
@property (nonatomic, weak) id <SoundDetectDelegate> delegate;
+ (id)sharedInstance;
-(void)beat;
@end

B.h

@interface HelloScene : SKScene <SoundDetectDelegate>
@property(nonatomic, strong) SoundDetect* sd;
@property(nonatomic, strong)Song* song;
@end

这是一种代表方式。

我试图在B.h中找到类似的东西:

@protocol SceneDelegate <NSObject>
-(void)cancel_thread;
@end
@interface HelloScene : SKScene <SoundDetectDelegate>
@property(nonatomic, strong) SoundDetect* sd;
@property(nonatomic, strong)Song* song;
@end

但是我在A.h。

中没有@interface SoundDetect : NSObject <SceneDelegate>

将变量从B传递到A的主要目的是我想将变量发送到A,以便A可以取消其当前线程。

由于

3 个答案:

答案 0 :(得分:1)

您不必使用委托,而是使用返回类型为BOOL的块来通知是否应该取消它。

答案 1 :(得分:0)

1 - 为了将数据从A传递到B你可以使用Segue,当它的委托被调用时,你可以像这样将数据从A传递到B

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 {
    if([segue.identifier isEqualToString:@"segueFromFirstToSecond"])
   {
    UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
    SecondViewController *controller = (SecondViewController *)navController.topViewController;
    controller.myValue = YES;  /// myvalue is property in secondViewCOntroller
   }
 }

2 - 为了将数据从B传递到A,您可以按照这些链接

http://www.mysamplecode.com/2012/12/ios-passing-data-between-view-controllers.html

http://tomsbigbox.com/pass-data-from-modal-view-back-to-parent-in-the-ios-sdk/

答案 2 :(得分:0)

解决方案 - 不要在.h中导入.m中的导入为.h中的引用引入前向声明@ class / @ protocol

在.m中的

- 具有以下类别。 @interface SoundDetect() @end

A.H

@protocol SoundDetectDelegate <NSObject>
-(void)update_from_sound: (SKSpriteNode*) node;
@end
@interface SoundDetect : NSObject
@property (nonatomic, weak) id <SoundDetectDelegate> delegate;
+ (id)sharedInstance;
-(void)beat;
@end

B.h

@class SoundDetect;
@interface HelloScene : SKScene 
@property(nonatomic, strong) SoundDetect* sd;
@property(nonatomic, strong)Song* song;
@end

B.m

#import "SoundDetect.h"
@interface HelloScene()<SoundDetectDelegate>
@end

@implementation HelloScene

-(void)update_from_sound: (id) node
{

}
@end