Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 网络类没有';t将数据发送给学员目标C_Objective C_Xcode - Fatal编程技术网

Objective c 网络类没有';t将数据发送给学员目标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

我是Objective-C新手,我正在尝试创建一个类来处理应用程序的
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。