Objective c 网络类没有';t将数据发送给学员目标C
我是Objective-C新手,我正在尝试创建一个类来处理应用程序的Objective c 网络类没有';t将数据发送给学员目标C,objective-c,xcode,Objective C,Xcode,我是Objective-C新手,我正在尝试创建一个类来处理应用程序的URLSession任务,以便从SoundCloud下载和播放歌曲,并使用协议和委托将其传递给SongPlayer类 我的NetworkManager.h文件: #import <Foundation/Foundation.h> @protocol NetworkDelegateProtocol<NSObject> -(void) didReceiveData:(id) data; @end @int
URLSession
任务,以便从SoundCloud
下载和播放歌曲,并使用协议和委托将其传递给SongPlayer
类
我的NetworkManager.h文件:
#import <Foundation/Foundation.h>
@protocol NetworkDelegateProtocol<NSObject>
-(void) didReceiveData:(id) data;
@end
@interface NetworkManager : NSObject
@property (nonatomic, weak) id<NetworkDelegateProtocol>delegate;
-(void) requestSong: (NSString *) songUrlStr;
@end
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>
#import "NetworkManager.h"
@interface SongPlayer : NSObject <NetworkDelegateProtocol ,AVAudioPlayerDelegate>
@property NetworkManager *networkManager;
@property (nonatomic, weak) AVAudioPlayer *songPlayer;
@property (nonatomic, weak) NSData *songData;
@property BOOL didDownload;
@end
我的SongPlayer.h文件:
#import <Foundation/Foundation.h>
@protocol NetworkDelegateProtocol<NSObject>
-(void) didReceiveData:(id) data;
@end
@interface NetworkManager : NSObject
@property (nonatomic, weak) id<NetworkDelegateProtocol>delegate;
-(void) requestSong: (NSString *) songUrlStr;
@end
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>
#import "NetworkManager.h"
@interface SongPlayer : NSObject <NetworkDelegateProtocol ,AVAudioPlayerDelegate>
@property NetworkManager *networkManager;
@property (nonatomic, weak) AVAudioPlayer *songPlayer;
@property (nonatomic, weak) NSData *songData;
@property BOOL didDownload;
@end
我在songplayervewcontroller
类中将SongPlayer
类设置为Delegate
:
@implementation SongPlayerViewController {
SongPlayer *songPlayer;
}
- (void)viewDidLoad {
[super viewDidLoad];
songPlayer = [[SongPlayer alloc]init];
songPlayer.networkManager.delegate = songPlayer;
NSArray *songUrlArray = [[NSArray alloc] initWithObjects: baseSongUrlStr, songId, endSongUrlStr, nil];
NSString *requestUrl = [songUrlArray componentsJoinedByString:@""];
NetworkManager *network = [[NetworkManager alloc] init];
[self setupSong];
[network requestSong:requestUrl];
}
@结束
当我尝试调试它时,dataTaskWithURL
已完成,NetworkManager
类接收数据
,但它从未将其发送给委托
先谢谢你
注:在我的NetworkManager
课程中,我有另一个URLSession
任务来按名称获取歌曲列表,该任务非常有效。在设置代理时,您的SongPlayer
上的NetworkManager
属性可能为零,因此。。。在Objective-C中,什么都没有发生
@implementation SongPlayerViewController {
SongPlayer *songPlayer;
...
- (void)viewDidLoad {
[super viewDidLoad];
songPlayer = [[SongPlayer alloc]init];
NetworkManager *network = [[NetworkManager alloc] init]; // do this here
songPlayer.networkManager = network; // set before use
songPlayer.networkManager.delegate = songPlayer;
NSArray *songUrlArray = [[NSArray alloc] initWithObjects: baseSongUrlStr, songId, endSongUrlStr, nil];
NSString *requestUrl = [songUrlArray componentsJoinedByString:@""];
[self setupSong];
[network requestSong:requestUrl];
}
@end
正如他在评论中所建议的,我必须更改songPlayer.networkManager.delegate=songPlayer;to network.delegate=songPlayer;在视图控制器和它的工作!
再次感谢。你在哪里调用requestSong?我的错误,我在SongPlayerServiceController类的viewDidLoad中调用requestSong,刚刚编辑了文章。谢谢。你在哪里初始化SongPlayer?呃,在同一个地方(SongPlayServiceWController类中的viewDidLoad),你的方法签名是错误的-(无效)didReceiveData:(id)数据;应该是id而不是NSData。