相关疑难解决方法(0)

如何检查Swift中Documents文件目录中是否存在文件?

如何检查文件目录中Swift是否存在文件?

我正在使用[ .writeFilePath ]方法将图像保存到Documents目录中,我想在每次启动应用程序时加载它.但是如果没有保存的图像,我有一个默认图像.

但我无法理解如何使用该[ func fileExistsAtPath(_:) ]功能.有人可以给出一个使用函数的示例,并将路径参数传递给它.

我相信我不需要在那里粘贴任何代码,因为这是一个通用的问题.任何帮助都感激不尽.

干杯

xcode ios swift

118
推荐指数
9
解决办法
10万
查看次数

在xcode单元测试中加载文件

我有一个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]预览所有捆绑包,单元测试包不会出现在列表中?

我试图创建一个单独的资源包,我似乎无法以编程方式找到它,尽管它确实已经构建和部署.

我究竟做错了什么 ?

xcode unit-testing nsbundle

56
推荐指数
4
解决办法
2万
查看次数

使用[NSBundle mainBundle] pathForResource:ofType:inDirectory访问文件:

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 objective-c filepath nsbundle ios

42
推荐指数
4
解决办法
10万
查看次数

在Xcode 7中更改了+加载方法顺序

我发现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)

unit-testing objective-c objective-c-runtime ios xcode7

18
推荐指数
1
解决办法
1891
查看次数

NSBundle pathForResource返回nil

我一直在尝试在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来放松搜索,但是它也没有用.

任何帮助都非常有用.

unit-testing objective-c nsbundle

11
推荐指数
2
解决办法
5992
查看次数

使用Swift Package Manager在单元测试中使用资源

我正在尝试在单元测试中使用资源文件并使用它来访问它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.

swift swift-package-manager

10
推荐指数
4
解决办法
2241
查看次数