如何检查文件目录中Swift是否存在文件?
我正在使用[ .writeFilePath ]方法将图像保存到Documents目录中,我想在每次启动应用程序时加载它.但是如果没有保存的图像,我有一个默认图像.
但我无法理解如何使用该[ func fileExistsAtPath(_:) ]功能.有人可以给出一个使用函数的示例,并将路径参数传递给它.
我相信我不需要在那里粘贴任何代码,因为这是一个通用的问题.任何帮助都感激不尽.
干杯
我有一个Xcode 5单元测试项目和一些与之相关的测试xml文件.我尝试了一堆方法,但我似乎无法加载xml文件.
我尝试过以下哪些不起作用
NSData* nsData = [NSData dataWithContentsOfFile:@"TestResource/TestData.xml"];
NSString* fileString = [NSString stringWithContentsOfFile:@"TestData.xml" encoding:NSUTF8StringEncoding error:&error];
Run Code Online (Sandbox Code Playgroud)
此外,如果我尝试使用[NSBundle allBundles]预览所有捆绑包,单元测试包不会出现在列表中?
我试图创建一个单独的资源包,我似乎无法以编程方式找到它,尽管它确实已经构建和部署.
我究竟做错了什么 ?
我paylines.txt在名为的文件夹中添加了一个文件,该文件TextFiles位于ResourcesXcode中我的iOS项目的文件夹中.
这是我用来访问文件的代码:
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"paylines" ofType:@"txt" inDirectory:@"TextFiles"];
NSLog(@"\n\nthe string %@",filePath);
Run Code Online (Sandbox Code Playgroud)
代码打印:
2011-06-07 14:47:16.251 slots2[708:207]
the string (null)
Run Code Online (Sandbox Code Playgroud) 我发现Xcode 7(版本7.0(7A220))改变了+load在单元测试期间调用类和类别的方法的顺序.
如果属于测试目标的类别实现了一个+load方法,那么现在可以在最后调用它,此时类的实例可能已经被创建和使用.
我有一个AppDelegate实现+load方法.该AppDelegate.m文件还包含AppDelegate (MainModule)类别.此外,还有一个单元测试文件LoadMethodTestTests.m,其中包含另一个类别 - AppDelegate (UnitTest).
这两个类别也实现了+load方法.第一类属于主要目标,第二类属于测试目标.
我做了一个小测试项目来证明这个问题.它是一个空的默认Xcode一个视图项目,只更改了两个文件.
AppDelegate.m:
#import "AppDelegate.h"
@implementation AppDelegate
+(void)load {
NSLog(@"Class load");
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"didFinishLaunchingWithOptions");
return YES;
}
@end
@interface AppDelegate (MainModule)
@end
@implementation AppDelegate (MainModule)
+(void)load {
NSLog(@"Main Module +load");
}
@end
Run Code Online (Sandbox Code Playgroud)
和一个单元测试文件(LoadMethodTestTests.m):
#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
#import "AppDelegate.h"
@interface LoadMethodTestTests : XCTestCase
@end
@interface AppDelegate (UnitTest) …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在iOS应用程序的单元测试中加载一个简单的文本文件.
NSString* resourcePath = [[NSBundle mainBundle] pathForResource: @"stopPointsInCircleData" ofType:@"txt"];
NSString* stopPointData = [NSData dataWithContentsOfFile: resourcePath];
Run Code Online (Sandbox Code Playgroud)
我的问题是pathForResource返回nil.
文件stopPointsInCircleData.txt位于测试代码的目录中,文件在测试目标的"构建阶段"中的"复制包资源"下正确列出.
我试图通过将type设置为nil来放松搜索,但是它也没有用.
任何帮助都非常有用.
我正在尝试在单元测试中使用资源文件并使用它来访问它Bundle.path,但它返回nil.
MyProjectTests.swift中的这个调用返回nil:
Bundle(for: type(of: self)).path(forResource: "TestAudio", ofType: "m4a")
Run Code Online (Sandbox Code Playgroud)
这是我的项目层次结构.我也尝试过移动TestAudio.m4a到一个Resources文件夹:
??? Package.swift
??? Sources
? ??? MyProject
? ??? ...
??? Tests
??? MyProjectTests
??? MyProjectTests.swift
??? TestAudio.m4a
Run Code Online (Sandbox Code Playgroud)
这是我的包装说明:
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "MyProject",
products: [
.library(
name: "MyProject",
targets: ["MyProject"])
],
targets: [
.target(
name: "MyProject",
dependencies: []
),
.testTarget(
name: "MyProjectTests",
dependencies: ["MyProject"]
),
]
)
Run Code Online (Sandbox Code Playgroud)
我正在使用Swift 4和Swift Package Manager Description API版本4.