【发布时间】:2010-07-15 14:06:24
【问题描述】:
超级难的问题
这是我的项目:
我在一个 iPhone 项目中使用 3000 个 jpeg。正常情况下,3000个文件加载在'NSBundle'(与App封装)中,然后加载到iPhone上。问题是应用程序大约是 500 个月。
所以我想将图像复制到与捆绑包不同的目录(例如“文档”)中,然后从捆绑包中删除所有 jpeg。我的想法是,应用第一次启动后,应用只有 2Mo,下次启动会非常快。
我的第一个想法是:
file in Bundle:Bundle中文件的路径 文件目标:我要放置文件的路径
if([manager copyItemAtPath:fileInBundle toPath:fileDestination error:&error])
if([manager removeItemAtPath:fileInBundle error:&error])
当然我试过'moveItemToPath' ^^
如果您在“NSBundle”之外复制,则该副本可以正常工作,但无法删除:
NSFilePath = "/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CF5C0ED352/myLovelyApp.app/Main.jpg";
NSUnderlyingError = Error Domain=NSPOSIXErrorDomain Code=1 "Operation could not be completed. Operation not permitted";
显然,我通过“[manager fileExistsAtPath:fileInBundle]”检查 main.jpg 是否存在,并通过“[manager isDeletableFileAtPath:fileInBundle]”检查可删除的可能性(不!)
之后,我检查了文件和目录的 POSIX 权限属性:
NSDictionary* whatPermissions=[manager attributesOfItemAtPath:fileInBundle error:&error];
NSLog(@"文件 POSiX 权限:%@",[whatPermissions objectForKey:@"NSFilePosixPermissions"]);
我得到一个 493 --> Chmod 755 -> read-Write-Exe/read-Exe/read-Exe。 所以不可能删除或写入该 NSBundle 中的文件。
我试图通过切换属性 POSIX PERMISSION 来强制: [manager setAttributes:permission ofItemAtPath:fileInBundle error:&error] // 将posix权限设置为511(chmod 777)
但它没有工作。
第二个想法:
所以 Xcode Building Setting 可能是我使用 INSTALL PERMISSION 标志的解决方案:
'u+w,go-w,a+rX'
但我尝试了很多可能性,但没有任何效果(也许我没有找到好的可能性) 我试过:'u+rwx,go+rwx,a+rwx', 'u+rw,go-rw,a+rwX'...
但是什么也没发生
我找到了带有“ALTERNATE_MODE”的“ALTERNATE_PERMISSIONS_FILES”,但似乎我必须在 xcode 参数中一个一个地用我的 3000 jpg 填充列表。当我尝试只使用 10 个文件时。
它没有用。我必须说我从来没有找到任何关于这些主题的教程或博客文章。因此,如果您知道其中之一。请随时分享。
在 XCode 构建系统指南中,没有帮助!!!!
第三个想法:
我试图更改目标:我在目标系统中添加了一个复制文件阶段。然后把所有的图片都放进去,但是好像没有效果,而且文件没有加载到iPhone上。
如何将 3000 个图像文件直接放入目录中,然后将其删除。
这是 iPhone 目录的样子:
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number7_S.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number8_N.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number8_S.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number9_N.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/myLovelyApp.app/number9_S.png",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Documents",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library/Caches",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library/Preferences",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library/Preferences/.GlobalPreferences.plist",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/Library/Preferences/com.apple.PeoplePicker.plist",
"private/var/mobile/Applications/4A173D2E-5CFC-4D12-978C-68CG5C0ED245/tmp",
我想将文件从 NSBundle 移动到 Documents 目录。
感谢您的帮助
【问题讨论】:
-
我倾向于认为这是一个最重要的超长问题
标签: iphone xcode permissions compilation target