我正在開發我的第一個iPhone應用程序。我的用戶界面由4個選項卡組成。第一個選項卡顯示活動項目。最後一個選項卡是一個「設置」選項卡,用戶可以在其中打開/關閉項目。設置選項卡包含項目的NSMutableArray(從webservices調用中檢索),然後將它們寫入應用程序的Documents文件夾中的文件。第一個選項卡通過將文件恢復到NSMutableArray並僅顯示IsActive位設置爲true的項目來讀取文件中的項目。一切正常,除非我在設置選項卡中移動項目狀態,然後立即單擊第一個選項卡。第一個選項卡未反映在設置選項卡中所做的更改。但是,如果在轉到第一個標籤之前點擊其中一個標籤,則第一個標籤會正確反映在設置標籤中所做的更改。我能想到的唯一的事情是,當從設置選項卡直接進入第一個選項卡時,文件沒有完成寫入「文檔」文件夾。我在設置選項卡的ViewDidDisapper事件中編寫NSMutableArray。我錯過了什麼?謝謝你的幫助。當寫一個NSMutable數組到文件完成?
0
A
回答
2
除非您的數據集很大,否則我認爲將所有數據保存在內存中並且僅在應用程序啓動時從應用程序中的磁盤寫入終止/背景並從磁盤讀取會好得多。創建一個單獨的「FooManager」類來保存應用程序不同部分所需的數據,並通過單例類的API訪問數據。我認爲這比懸掛ProjectAppDelegate的所有東西都要乾淨得多。這也應該解決你的寫/讀競爭條件。
編輯:這裏是我在當前項目中使用的一個小型單點網絡圖像緩存管理器類。有時候一個例子值得千言萬語:)。爲了使用這個類,在任何代碼,只需#IMPORT頭,並做到:
NetworkImageCacheManager *nicm = [NetworkImageCacheManager sharedInstance];
UIImage *img = [nicm imageWithURL:imageURL];
下面是這個類的代碼:你在哪裏加載存儲陣列中的第一
#import <Foundation/Foundation.h>
@interface NetworkImageCacheManager : NSObject
{
NSMutableDictionary *imgCache;
}
@property (nonatomic, retain) NSMutableDictionary *imgCache;
+ (NetworkImageCacheManager *) sharedInstance;
- (UIImage *) imageWithURLString:(NSString *)imgURLString;
- (void) setImage:(UIImage *)theImage forURLString:(NSString *)imgURLString;
@end
@implementation NetworkImageCacheManager
@synthesize imgCache;
- (id) init
{
self = [super init];
if (self)
{
self.imgCache = [NSMutableDictionary dictionary];
}
return self;
}
+ (NetworkImageCacheManager *) sharedInstance
{
static NetworkImageCacheManager *g_instance = nil;
if (g_instance == nil)
{
g_instance = [[self alloc] init];
}
return g_instance;
}
- (UIImage *) imageWithURLString:(NSString *)imgURLString
{
UIImage *rv = [self.imgCache objectForKey:imgURLString];
return rv;
}
- (void) setImage:(UIImage *)theImage forURLString:(NSString *)imgURLString
{
[self.imgCache setObject:theImage forKey:imgURLString];
}
- (void) dealloc
{
[imgCache release];
[super dealloc];
}
@end
+0
我同意。在這種情況下,我沒有看到寫入磁盤的好處。它使事情複雜化並導致像你所描述的問題。 – raidfive 2011-02-11 18:17:44
相關問題
- 1. 寫一個數組到一個文件
- 2. 通過writeToFile將NSMutable數組寫入plist文件
- 3. 在iOS中發送一個NSMutable數組到一個php腳本
- 4. 如何在導航到下一個組件時自動完成當前組件?
- 5. c#寫一個數組列表到一個文本文件
- 6. 寫一個數組到一個文本文件
- 7. 寫一個二維數組到一個文本文件
- 8. 如何寫一個多維數組到一個文本文件?
- 9. 寫一個整數和字符數組到一個文件
- 10. 以降序購買一個NSMutable數組
- 11. 當寫入到一個XML文件
- 12. JAVA將數據存儲到outputBuffer數組中,當數據完全寫入文件
- 13. 閱讀XML文件並寫入到一個php數組/文件
- 14. 寫一個二維數組到一個文件中的java
- 15. 如何寫一個數組到一個文件,而無需HTML
- 16. 在一行中寫入兩個數組到一個文件,Powershell
- 17. 寫一個二維數組到一個csv文件
- 18. 寫一個數組到一個文件中C
- 19. NSMutable Array到XML文件
- 20. 寫作元組值到一個文件
- 21. 改寫成一個文件
- 22. 寫一個PHP數組到文件生成二進制而不是純文本
- 23. 我怎樣才能將NSMutable數組POST到目標文件c
- 24. 將一個NSData數組寫入文件
- 25. 寫一個數組列表文件
- 26. C++寫一個數組的所有值轉換成txt文件
- 27. 寫一個數組到CSV
- 28. 爲什麼寫一個小字節數組到一個文件比寫一個大數組要快?
- 29. 等到repaint組件完成
- 30. CCSprite的VS CCSpriteBatchNode和一個NSMutable數組的數組?
標籤? viewDidLoad不會是正確的地方。 – Felix 2011-02-11 17:43:17