【发布时间】:2020-10-18 16:03:36
【问题描述】:
抱歉,我只是在 Flutter 下处理继承的 Objective-C 项目的第二天。
我只是 obj-c 代码的一个新方法,它会引发异常。
我猜我的方法签名有问题。
当我检查 path 和 callbackUuid 变量时,它们在调用之前具有预期值。
代码是从颤振/飞镖调用的,但我认为这与问题无关。
NSInvalidArgumentException
unrecognized selector sent to instance xxxx
[NSObject(NSObject) doesNotRecognizeSelector]
_CF_forwarding_prep_0
SoundPlayerManger handlerMethodCall:result
调用代码:
NSString* path = (NSString*)call.arguments[@"path"];
NSString* callbackUuid = (NSString*)call.arguments[@"callbackUuid"];
[aSoundPlayer getDuration:path callbackUuid: callbackUuid result:result];
声明
- (void)getDuration: (NSString*_Nonnull)path callbackUuid:(NSString*_Nonnull)callbackUuid result:(FlutterResult _Nonnull )result;
我正在调用的方法:
- (void)getDuration: (NSString*)path callbackUuid:(NSString*)callbackUuid result:(FlutterResult)result
{
/// let the dart code resume whilst we calculate the duratin.
result(@"queued");
NSLog(@"getDuration queued");
NSURL *afUrl = [NSURL fileURLWithPath:path];
AudioFileID fileID;
NSLog(@"Call AudioFileOpenUrl");
OSStatus status = AudioFileOpenURL((__bridge CFURLRef)afUrl, kAudioFileReadPermission, 0, &fileID);
Float64 outDataSize = 0;
UInt32 thePropSize = sizeof(Float64);
status = AudioFileGetProperty(fileID, kAudioFilePropertyEstimatedDuration, &thePropSize, &outDataSize);
AudioFileClose(fileID);
NSLog(@"%@", [NSString stringWithFormat:@"getDuration status%d", (int)status]);
if (status == kAudioServicesNoError)
{
int milliseconds = outDataSize * 1000;
NSString* args = [NSString stringWithFormat:@"{\"callbackUuid\": \"%@\", \"milliseconds\": %d}"
,callbackUuid
, milliseconds ];
[self invokeCallback:@"durationResults" stringArg:args];
}
else
{
/// danger will robison, danger
NSString* args = [NSString stringWithFormat:@"{\"callbackUuid\": \"%@\", \"description\": \"%d\"}"
, callbackUuid
, (int)status ];
[self invokeCallback:@"onError" stringArg:args];
}
}
【问题讨论】:
标签: ios objective-c flutter exception