2012-10-01 29 views
10

Tôi lưu một số tệp được tạo trong thời gian chạy bên trong gói ứng dụng iOS của tôi. Trong mô phỏng nó hoạt động tốt, trong thiết bị nó bị treo:Ứng dụng iOS có quyền ghi vào bên trong gói của ứng dụng này không?

thể tạo tập tin đầu ra trong đường dẫn bộ nhớ cache đổ bóng cho '/ var/mobile/Applications/CB064997-B40E-4FE3-9834-B3217CE33489/SimedTest. ứng dụng/Ogre3D/asset/RTShaderLib/cache/

Có tổng quan tốt về nơi tôi nên và không nên đặt tệp - cách sử dụng Tài liệu, Thư viện và tmp, v.v ... không?

Để làm rõ, đây là những tệp được tạo lúc khởi động, tính toán trước một số dữ liệu để tiết kiệm thời gian. NẾU chúng không có mặt, chúng sẽ được tạo ra vì vậy chúng sẽ bị xóa, nhưng không phải trong khi ứng dụng đang chạy.

+1

Xem http://stackoverflow.com/a/12371323/1633251 để biết thông tin chi tiết về nơi lưu trữ tệp và ngăn sao lưu iCloud. –

Trả lời

14

Gói là read-only. Bạn không muốn gây rối với nó vì hai lý do:

  • Mã ký: chữ ký được xác minh bằng nội dung của gói; nếu bạn lộn xộn xung quanh với các bó, bạn phá vỡ chữ ký.
  • Cập nhật ứng dụng: cập nhật hoạt động bằng cách thay thế toàn bộ gói ứng dụng bằng gói mới được tải xuống; bất kỳ thay đổi nào bạn thực hiện sẽ bị mất.

đâu bạn nên lưu thứ:

  • Tài liệu: nếu bạn muốn nó tồn tại và được sao lưu
  • Library/Caches: nếu bạn chỉ muốn bộ nhớ cache dữ liệu tải về, giống như bức ảnh hồ sơ; sẽ tự động bị xóa bởi hệ thống nếu nó ở mức thấp trên phòng trừ khi bạn chỉ định với một lá cờ không xóa đặc biệt.
  • tmp: tạm thời các file, xóa khi ứng dụng của bạn không chạy

Đối với một giải thích đầy đủ kiểm tra File System Programming GuideQA1719.

+0

hành vi của tmp ... khi nào nó bị xóa? –

+0

@John Được cập nhật bằng liên kết; bạn nên rõ ràng tmp mình, nhưng hệ thống có quyền xóa bất cứ điều gì có bất cứ lúc nào ứng dụng của bạn không chạy. – benzado

4

Không, mỗi khi bạn thay đổi gói, bạn sẽ làm mất hiệu lực chữ ký của mình.

Nếu bạn muốn ghi tệp bạn cần phải viết vào thư mục tốt nhất tùy thuộc vào những gì bạn muốn làm với tệp đó.

  1. Tài liệu thư mục cho thời gian dài tập tin
  2. cache cho các hoạt động nhỏ
  3. và vân vân

EDIT

Để có được path `ll cần một cái gì đó như thế này:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"filename.ext"]; 

Với path này bạn có thể viết hoặc đọc như thế này:

viết:

NSString *content = @"One\nTwo\nThree\nFour\nFive"; 
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil]; 

đọc:

NSString *content = [[NSString alloc] initWithContentsOfFile:fileName usedEncoding:nil error:nil]; 
Các vấn đề liên quan