我这里有这个代码:
if(preg_match('/([01]?[0-9]|2[0-3]):{0,1}[0-5][0-9](:[0-5][0-9])?/', $str)) {
....
}
但是urlData返回了nill
我已经尝试过datawithcontentsoffile但是在使用url变量时我收到了警告。
当我在Windows中转到此url文件://SERVER/FOLDER/FOLDER/FTP/ANC.pdf时,它会打开该文件,但在Mac上它不会。
我也尝试了以下内容:
NSString *stringURL = @"\\\\SERVER\\FOLDER\\FOLDER\\FTP\\ANC\\ANC.pdf";
NSURL *url = [NSURL fileURLWithPath:stringURL];
NSData *urlData = [NSData dataWithContentsOfURL:url];
但是得到这些错误:
NSString *stringURL = @"file://SERVER/FOLDER/FOLDER/FTP/ANC.pdf";
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:[NSURL URLWithString:stringURL]
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
// handle response
}] resume];
// NSURL *url = [NSURL URLWithString:stringURL];
// NSData *urlData = [NSData dataWithContentsOfURL:url];
更新我能够通过以下内容获取网址:
NSErrorFallingURLStringKey
NSErrorFallingURLKey
NSLocalizedDescription
NSUnderlyingError
然而,这会返回nill:
NSURL *url = [NSURL fileURLWithPath:@"file:///server/FOLDER/FOLDER/FTP/ANC/ANC.pdf"];
我将错误添加到dataWithContentsofURL
它返回了这个:
NSData *urlData = [NSData dataWithContentsOfURL:url];
我通过“获取信息”查看了相关文件,它开始时就像connectionError NSError * domain: @"NSCocoaErrorDomain" - code: 260 0x166d8af0
答案 0 :(得分:7)
+[NSData dataWithContentsOfURL:]
可以出于多种原因返回nil
。如果任何在尝试使用该网址时出错,则此方法将返回nil
。例如,文件可能不存在,网络连接可能超时,或者URL甚至可能格式不正确。返回nil
,应用程序不知道为什么。
+ [NSData dataWithContentsOfURL:options:error:]
将告诉来电者出了什么问题。返回nil
时,error
参数将填充一个描述发生问题的对象。使用这种方法可以直接回答“为什么”的问题。
这两种方法都是同步方法,不鼓励使用它们来处理文件,网络资源,尤其是从网络资源提供的文件。这些方法将阻止调用者,并不是真正用于这些用途。最好使用输入流或NSURLSession
。
从您的问题看,您似乎正在尝试访问SMB共享中存在的文件。不幸的是,iOS不支持SMB - 即使你有一个格式正确的smb URL(即smb://servername/sharename/filename.pdf),你也无法在不使用第三方SMB实现的情况下访问它。
然而,使用FTP代替SMB应该可行。
答案 1 :(得分:0)
只需做一些小改动,实际上你的pdf文件在服务器上,所以你必须像这样更改你的代码。
NSURL *url = [NSURL URLWithString:stringURL];
我试过这个并且工作正常。
如果您的文件位于应用程序的主要包中,则可以使用fileURLWithPath
。
答案 2 :(得分:0)
如果您有一个带有反斜杠分隔符的有效Windows文件路径,则可以使用CoreFoundation
方法将其转换为CFURL
/ NSURL
对象
NSString *stringURL = @"\\\\SERVER\\FOLDER\\FOLDER\\FTP\\ANC\\ANC.pdf";
NSURL *url = (NSURL *)CFBridgingRelease(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, stringURL, kCFURLWindowsPathStyle, false));
如果字符串以file://
开头,那么它是带有file
方案的Mac网址字符串,您可以使用
NSString *fileURLString = @"file:///Applications";
NSURL *url = [NSURL URLWithString:fileURLString];
请考虑在方案的两个斜杠之后,有效的文件方案字符串必须为根文件夹设置第三个斜杠。
方法fileURLWithPath
只能在字符串以单斜杠开头时使用,它会隐式添加file://
方案。
NSString *pathString = "/Applications";
NSURL *url = [NSURL fileURLWithPath: pathString];
答案 3 :(得分:0)
确保网址包含<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:background="@android:color/white">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<fragment
android:id="@+id/pawfile_header"
android:name="com.lightbulb.pawesome.fragments.PawfileHeaderFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<fragment
android:id="@+id/pawfile_timeline"
android:name="com.lightbulb.pawesome.user_timeline.PawesomeUserTimelineFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
或http://
。
例如:https://
答案 4 :(得分:0)
在iOS应用程序中访问文件时要记住两件事:
如果您要从iOS应用程序沙箱(文档或缓存目录)访问文件,请使用以下命令:
NSURL *url = [NSURL fileURLWithPath:strUrl];
如果您要从iOS应用程序中的任何服务器访问文件,请使用:
NSURL *url = [NSURL URLWithString:strUrl];
注意:从模拟器运行时,无法从iOS应用程序中的mac访问文件。
希望这有帮助!
答案 5 :(得分:-1)
请使用此代码检查您的代码
-(void)downloadPdfBtnPressed:(id)sender
{
NSString *dowloadURL = [DownloadUrlArray objectAtIndex:[sender tag ]];
NSString *filename =[dowloadURL lastPathComponent];
NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"/Download"];
if (![[NSFileManager defaultManager] fileExistsAtPath:stringPath])
[[NSFileManager defaultManager] createDirectoryAtPath:stringPath withIntermediateDirectories:NO attributes:nil error:nil];
NSData *pdfData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:dowloadURL]];
if(pdfData)
{
stringPath = [stringPath stringByAppendingPathComponent:filename];
[pdfData writeToFile:stringPath atomically:YES];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[singletonObj getTranslationForKey:@"AlereTitleContactus"]
message:@"PDF file is downloaded"
delegate:nil
cancelButtonTitle:[singletonObj getTranslationForKey:@"alertOK"]
otherButtonTitles:nil];
[alert show];
}
}