我正在努力完成这个难题.
__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.
我一直在尝试添加一些代码来在键盘出现时移动我的视图,但是,我在尝试将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)
如果有人能让我知道这行代码应该是什么,我应该设法自己弄清楚其余部分.
我正在创建一个文件夹,用我的iPhone App缓存Documents中的图像.我希望能够将此文件夹的大小保持在1MB,因此我需要检查文件夹的大小(以字节为单位).
最好的方法是什么?
我正在尝试使用可用的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下无效.
在iOS 8.1应用程序中,我使用的NSURLSessionDownloadTask是在后台下载档案,有时会变得非常大.
一切正常,但如果手机磁盘空间不足,会发生什么?下载是否会失败,并表明存在剩余磁盘空间问题?有没有提前检查的好方法?
我在swift中遇到了这种愚蠢的行为,其中强制解包一个可选项不会传播.
从文档:
试着用!访问不存在的可选值会触发运行时错误.在使用之前,请务必确保可选项包含非零值!强行解开它的价值.
重现:
func foo(bar:String?) throws{
print(bar!);
}
Run Code Online (Sandbox Code Playgroud)
和
try foo(nil);
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不合逻辑或一致,我找不到有关此主题的任何文档.
这是设计的吗?
我想我想能够找到任何存储空间,而不仅仅是系统盘,但这是最重要的.
我使用这种方法来获取磁盘上的可用空间,从一些研究后发现的代码中提取.
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了.
哪里出错了?
以下是我用来获取 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。
这是为什么?如何获得与“设置”显示的值相同的值?
我正在开发一个需要显示一些设备信息的应用程序,有人可以帮我验证是否合法提取这些信息,可能一些代码片段会非常有用.
提前致谢 !
设备信息:
在aboutiOS 部分,它有很多关于设备的信息。
我可以和我可以访问这些信息吗?
我想快速获取数据settings -> General -> About。在 iOS 中获得相同的内容是否可行?
我尝试使用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) 我希望我的应用程序知道磁盘可用空间何时更改并更新我的视图.系统是否发送了任何通知?
ios ×10
swift ×4
iphone ×3
objective-c ×3
filesystems ×2
storage ×2
swift2 ×2
cocoa ×1
diskspace ×1
hard-drive ×1
itunes ×1
nsdata ×1
nsurlsession ×1
uikeyboard ×1