相关疑难解决方法(0)

在哪些情况下我们需要在ARC下编写__autoreleasing所有权限定符?

我正在努力完成这个难题.

__strong是所有Objective-C可保留对象指针的默认值,如NSObject,NSString等.这是一个强大的参考.ARC -release在范围的末尾与a平衡.

__unsafe_unretained等于旧的方式.它用于弱指针而不保留可保留对象.

__weak就像__unsafe_unretained不同之处在于它是一个自动归零弱引用这意味着该指针将零一旦引用的对象被释放被设置为.这消除了悬空指针和EXC_BAD_ACCESS错误的危险.

但到底有什么__autoreleasing好处呢?我很难找到关于何时需要使用此限定符的实际示例.我相信它只适用于期望指针指针的函数和方法,例如:

- (BOOL)save:(NSError**);
Run Code Online (Sandbox Code Playgroud)

要么

NSError *error = nil;
[database save:&error];
Run Code Online (Sandbox Code Playgroud)

在ARC下必须以这种方式声明:

- (BOOL)save:(NSError* __autoreleasing *);
Run Code Online (Sandbox Code Playgroud)

但这太模糊了,我想完全理解为什么.我找到的代码片段将__autoreleasing放在两颗星之间,这对我来说很奇怪.类型是NSError**(一个指针指向NSError),那么为什么要放在__autoreleasing星星之间而不是简单地放在前面NSError**呢?

此外,可能还有其他必须依赖的情况__autoreleasing.

memory-management objective-c ios automatic-ref-counting

114
推荐指数
3
解决办法
3万
查看次数

从Swift中的userInfo获取键盘大小

我一直在尝试添加一些代码来在键盘出现时移动我的视图,但是,我在尝试将Objective-C示例转换为Swift时遇到了问题.我取得了一些进展,但我被困在一条特定的路线上.

这些是我一直关注的两个教程/问题:

当Keypad使用Swift出现时,如何向上移动UIViewController的内容 http://www.ioscreator.com/tutorials/move-view-when-keyboard-appears

这是我目前的代码:

override func viewWillAppear(animated: Bool) {
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
}

override func viewWillDisappear(animated: Bool) {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

func keyboardWillShow(notification: NSNotification) {
    var keyboardSize = notification.userInfo(valueForKey(UIKeyboardFrameBeginUserInfoKey))
    UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
    let frame = self.budgetEntryView.frame
    frame.origin.y = frame.origin.y - keyboardSize
    self.budgetEntryView.frame = frame
}

func keyboardWillHide(notification: NSNotification) {
    //
}
Run Code Online (Sandbox Code Playgroud)

目前,我在这一行收到错误:

var keyboardSize = notification.userInfo(valueForKey(UIKeyboardFrameBeginUserInfoKey))
Run Code Online (Sandbox Code Playgroud)

如果有人能让我知道这行代码应该是什么,我应该设法自己弄清楚其余部分.

uikeyboard swift

78
推荐指数
3
解决办法
6万
查看次数

如何计算文件夹的大小?

我正在创建一个文件夹,用我的iPhone App缓存Documents中的图像.我希望能够将此文件夹的大小保持在1MB,因此我需要检查文件夹的大小(以字节为单位).

我有代码来计算文件大小,但我需要文件夹的大小.

最好的方法是什么?

iphone nsfilemanager ios

66
推荐指数
5
解决办法
4万
查看次数

使用Swift查询可用的iOS磁盘空间

我正在尝试使用可用的iOS设备存储Swift.我在这里找到了这个功能

        func deviceRemainingFreeSpaceInBytes() -> NSNumber {
          let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
          let systemAttributes = NSFileManager.defaultManager().attributesOfFileSystemForPath(documentDirectoryPath.last as String, error: nil)
          return systemAttributes[NSFileSystemFreeSize] as NSNumber
        }
Run Code Online (Sandbox Code Playgroud)

但是在编译时给出了这个错误:[NSObject : AnyObject]? does not have a member named 'subscript' 我认为这个错误来自这里提到的问题,即attributesOfFileSystemForPath返回一个可选的字典(文档).我在一般意义上理解这个问题,但是由于建议的解决方案涉及嵌套的情况,我不太清楚如何修复我感兴趣的函数(这对我来说并不是很有帮助Swift).有人可以建议如何使功能工作?注意:我不确定作者是否测试了原始函数,或者它是否在xcode 6 beta下运行,但据我所知,它在GM下无效.

storage ios swift

23
推荐指数
3
解决办法
1万
查看次数

如果在后台使用NSURLSessionDownloadTask时磁盘空间不足会发生什么?

在iOS 8.1应用程序中,我使用的NSURLSessionDownloadTask是在后台下载档案,有时会变得非常大.

一切正常,但如果手机磁盘空间不足,会发生什么?下载是否会失败,并表明存在剩余磁盘空间问题?有没有提前检查的好方法?

ios nsurlsession nsurlsessiondownloadtask

20
推荐指数
1
解决办法
834
查看次数

快速的力 - 展开异常没有传播

我在swift中遇到了这种愚蠢的行为,其中强制解包一个可选项不会传播.

从文档:

试着用!访问不存在的可选值会触发运行时错误.在使用之前,请务必确保可选项包含非零值!强行解开它的价值.

重现:

func foo(bar:String?) throws{
    print(bar!);
}
Run Code Online (Sandbox Code Playgroud)

try foo(nil);
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎不合逻辑或一致,我找不到有关此主题的任何文档.

这是设计的吗?

ios swift swift2

17
推荐指数
2
解决办法
3716
查看次数

你怎么知道Cocoa剩下多少磁盘空间?

我想我想能够找到任何存储空间,而不仅仅是系统盘,但这是最重要的.

cocoa objective-c hard-drive

8
推荐指数
3
解决办法
1万
查看次数

iPhone - 设备上留下的可用空间不正确(+ - 200 Mb差异)

我使用这种方法来获取磁盘上的可用空间,从一些研究后发现的代码中提取.

    float freeSpace = -1.0f;  
    NSError* error = nil;  
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    NSDictionary* dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];  

    if (dictionary) {  
        NSNumber* fileSystemSizeInBytes = [dictionary objectForKey:NSFileSystemFreeSize];  
        freeSpace = [fileSystemSizeInBytes floatValue];  
    }
Run Code Online (Sandbox Code Playgroud)

我想知道为什么在运行这个时,它给了我3660062720.000000字节的可用空间,这将给出3,408699035644531 Gb(/ 1024/1024/1024)

但是看看我的iPhone设置 - >一般信息(还有iTunes),我说我的iPhone只剩下3.2 Gb了.

哪里出错了?

filesystems iphone diskspace itunes objective-c

6
推荐指数
1
解决办法
3142
查看次数

为什么 NSFileSystemFreeSize 的值与 iOS 设置中报告的可用大小不同?

以下是我用来获取 iOS 设备上应用程序的可用存储空间的方法:

NSDictionary *dict = [[NSFileManager defaultManager] fileSystemAttributesAtPath:@"/var"];
NSNumber *freeSpace = [dict valueForKey:@"NSFileSystemFreeSize"];
Run Code Online (Sandbox Code Playgroud)

但是,该值freeSpace与“设置”应用程序中显示的值不符。该值始终大于“设置”显示的值。例如,freeSpace大约为 600,000,000 字节,其中“设置”显示 357 MB。

这是为什么?如何获得与“设置”显示的值相同的值?

storage ios

3
推荐指数
1
解决办法
5948
查看次数

获取操作系统版本,电池,存储,内存等系统信息

我正在开发一个需要显示一些设备信息的应用程序,有人可以帮我验证是否合法提取这些信息,可能一些代码片段会非常有用.

提前致谢 !

设备信息:

  • 保持电池状态
  • 电话充电
  • 设备OS版本
  • 当前应用版本
  • 有效内存
  • 可用存储

ios

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

获取设置数据 -> 常规 -> 关于

aboutiOS 部分,它有很多关于设备的信息。

我可以和我可以访问这些信息吗?

我想快速获取数据settings -> General -> About。在 iOS 中获得相同的内容是否可行?

iphone ios swift2

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

iOS:为什么我的大文件没有用NSData(contentsOfFile:options :)转换?错误域= NSCocaErrorDomain代码= 256

我尝试使用NSData转换视频,它与小视频或100mb的视频效果很好,但是我的大文件(4.44Gb)没有发送...

   var video_data: NSData?
    do {
        video_data = try NSData(contentsOfFile: (videoPath), options: NSData.ReadingOptions.alwaysMapped)
    } catch let error as NSError {
        video_data = nil
        return
    }
Run Code Online (Sandbox Code Playgroud)

如何将大文件放入NSData?

Error Domain=NSCocoaErrorDomain Code=256 "Impossible d’ouvrir le fichier « D9C7DABF-4BE3-4105-8D76-AA92B1D1502E_video.notsend »." UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/EAE9B4C4-BE6B-490C-BEE7-381B2DF27CC9/Library/LEADS/D9C7DABF-4BE3-4105-8D76-AA92B1D1502E_video.notsend, NSUnderlyingError=0x283be1380 {Error Domain=NSPOSIXErrorDomain Code=12 "Cannot allocate memory"}}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

提前致谢。

编辑1:要 发送的参数:
这是整个功能。我需要所有这些参数才能发送到我的服务器。我需要在数据值中发送eventId,contactId,类型和文件。问题是我有一个错误,我不知道如何使用InputStream将4.44Go文件放入数据中。

 func uploadVideo(_ videoPath: String, fileName: String, eventId: Int, contactId: Int, type: Int, callback: @escaping (_ data:Data?, _ resp:HTTPURLResponse?, _ error:NSError?) -> Void)
    {
        var video_data: Data
        video_data = self.getNextChunk(urlOfFile: NSURL(string: …
Run Code Online (Sandbox Code Playgroud)

nsdata ios swift

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

如何监控iOS磁盘空间的变化?

我希望我的应用程序知道磁盘可用空间何时更改并更新我的视图.系统是否发送了任何通知?

filesystems notifications ios

-2
推荐指数
1
解决办法
1410
查看次数