我有一个简单的:
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let dataPath = documentsPath.stringByAppendingPathComponent("Images")
let imagesPath = dataPath.stringByAppendingPathComponent(fileName)
var dictionary = NSMutableDictionary(contentsOfFile: imagesPath)!
在它到达最后一行之后,它崩溃并给了我'
致命错误:在解包可选值时意外发现nil
变量fileName
声明为var fileName: String!
我也无法写入路径。我做错了什么?
答案 0 :(得分:2)
除了gnasher729的建议之外,另一个潜在的问题是NSDictionaries及其子类的contentsOfFile初始化程序:
返回值
初始化字典 - 可能与原始接收者不同 - 在路径中包含字典,如果存在文件错误或文件内容是字典的无效表示,则为nil。
因此,如果该字典存在问题,则强行将其解包到此行
var dictionary = NSMutableDictionary(contentsOfFile: imagesPath)!
它会崩溃。
答案 1 :(得分:1)
将fileName声明为String!意味着它可能不包含String,但您确定它确实存在,并且如果您使用变量fileName并且它不包含String,则表示您接受应用程序崩溃。这似乎就是这种情况。
答案 2 :(得分:0)
正如其他人所指出的那样,问题很可能是你正在使用的一个未被包装的强制选项。 public LaunchedSurvey()
{
CreationTime = DateTime.UtcNow;
WorkerLaunchedSurveys = new Collection<WorkerLaunchedSurvey>();
WorkerQualificationRequests = new Collection<WorkerQualificationRequest>();
_remainingDemographic = new DateTime(1900, 1, 1);
MinimumPercent = 0.10;
ExcludeList = new List<LaunchedSurvey>();
IncludeList = new List<LaunchedSurvey>();
ScreenedWorkers = new List<ScreenedWorker>();
EmailMessages = new List<EmailMessage>();
AssignmentsPendingWorkers = new HashSet<AssignmentsPendingWorker>();
ExcludedWorkersManual = new List<AmazonWorkerExcluded>();
IncludedWorkersManual = new List<AmazonWorkerIncluded>();
PendingWorkersQualificationsUnknown = new List<AmazonWorkerPending>();
Tags = new List<Tag>();
ManualQualificationTypeIdList = new List<QualificationType>();
WorkerSurveyStatisticAuto = new WorkerSurveyStatisticAuto();
WorkerSurveyStatisticManual = new WorkerSurveyStatisticManual();
WorkerUniqueIdentifierList = new List<WorkerUniqueIdentifier>();
}
有时被称为!
是有原因的。他们有爆炸的倾向:)一次解开一个东西并使用一些Bang!
语句将帮助你找出问题所在:
print