我有一个tableview
的视图控制器,每个tableview单元格中都有一个可编辑的UILabel
。每个单元格还与音频文件相关联。每当编辑标签时,我都会调用一个NSObject
子类来处理我的文件,将音频文件重命名为标签被更改为的内容。然后我返回NSURL
绝对字符串以存储在核心数据中。我的问题是,如果此过程抛出错误 - 例如“文件路径已存在”,我怎样才能让它在我的视图控制器中显示UIAlertView
而不是我的NSObject
子类。我猜我需要某种类型的块来返回NSString
或NSError
。我对块没有太多经验,我们将不胜感激。
我的视图控制器中调用NSObject子类重命名文件的方法
recording.audioURL = [self.managedDocument changeFileName:previousPath withNewComponent:textField.text];
这是我的NSObject子类中重命名音频文件
的方法-(NSString*) changeFileName:(NSString*) previousPath withNewComponent:(NSString*)newComponenet
{
NSURL * oldURL = [self.url URLByAppendingPathComponent:@"audioFiles"];
oldURL = [oldURL URLByAppendingPathComponent:[previousPath lastPathComponent]];
NSString * trimmedString = [newComponenet stringByReplacingOccurrencesOfString:@" " withString:@""];
NSURL * newURL = [self.url URLByAppendingPathComponent:@"audioFiles"];
newURL = [newURL URLByAppendingPathComponent:trimmedString];
newURL = [newURL URLByAppendingPathExtension:@"m4a"];
NSFileManager * fileManager = [NSFileManager defaultManager];
NSError * err;
BOOL result = [fileManager moveItemAtURL:oldURL toURL:newURL error:&err];
if(!result)
{
NSLog(@"Error: %@", err);
}
return newURL.absoluteString;
}
答案 0 :(得分:1)
最直接的方法是遵循您正在使用的NSFileManager
方法的示例。通过by-reference参数间接输出NSError*
指针,并使方法的直接返回值表示成功或失败:
-(NSString*) changeFileName:(NSString*) previousPath withNewComponent:(NSString*)newComponenet error:(NSError**)error
{
NSURL * oldURL = [self.url URLByAppendingPathComponent:@"audioFiles"];
oldURL = [oldURL URLByAppendingPathComponent:[previousPath lastPathComponent]];
NSString * trimmedString = [newComponenet stringByReplacingOccurrencesOfString:@" " withString:@""];
NSURL * newURL = [self.url URLByAppendingPathComponent:@"audioFiles"];
newURL = [newURL URLByAppendingPathComponent:trimmedString];
newURL = [newURL URLByAppendingPathExtension:@"m4a"];
NSFileManager * fileManager = [NSFileManager defaultManager];
BOOL result = [fileManager moveItemAtURL:oldURL toURL:newURL error:error];
if(!result)
return nil;
return newURL.absoluteString;
}
在调用者中,检查返回值以确定它是否失败,如果是,则显示错误。