2014-02-05 150 views
-2

我想創建一個類,每次我調用像init這樣的方法時,我可以傳遞像date和time和timerTime這樣的參數。然後我想保存該對象。但我可能想運行一些代碼來確定方法內部對象的顏色屬性。我需要能夠創建很多這些而不覆蓋舊的,然後檢索它們。如何創建一個包含多個對象和數據的數據庫

我現在正在做的是我有一個叫做點的類。我修改了它的init方法來獲取一些變量,然後使用NSKeyedArchiver來歸檔一個數組。之後我還通過將BOOL作爲No傳遞給init方法來使用它來檢索該數組。這裏的問題是我只能創建1個數據對象,但我希望每次調用該對象時都會創建一個DIFFERENT對象,而不是創建1個對象然後覆蓋它。下面是代碼:

- (id)initWithTime:(NSDate *)dateTime colour:(UIColor *)color time:(int)time retainerCycled:(BOOL)retainerCycled andShouldArchiveData:(BOOL)shouldArchiveData { 
    self = [super init]; 
    if (self) { 
     if (shouldArchiveData == YES) { 

      //configure our variables 
      // 7200 = 2h || 10800 = 3h 
      if (time < 7200) { 
       color = [UIColor greenColor]; 
      } else if (time >= 7200 && time < 10800) { 
       color = [UIColor yellowColor]; 
      }else if (time > 10800) { 
       color = [UIColor redColor]; 
      } 

      //save the entrie 
      data = [NSKeyedArchiver archivedDataWithRootObject:[NSArray arrayWithObjects:dateTime, color, time, retainerCycled, nil]]; 

     } else { 

      //get all our entries back 
      NSArray *entries = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
      [[NSUserDefaults standardUserDefaults] setObject:entries forKey:@"dots"]; 
     } 

    } 
    return self; 
} 

編輯: 我一直環顧四周,我發現可能對每個對象,我可以爲每個我需要性的關鍵點創建一個屬性列表,然後每個命名plist的創建方式不同,並將這些名稱或plists的數量存儲在數組中以便稍後檢索所有這些名稱。另外創建的每個對象都不能被修改。

答:

我所做的是以下內容。首先,我設置爲0。在一個NSUserDefaults的整數餘然後將以下代碼添加到自定義類:

- (id)initWithTime:(NSDate *)dateTime colour:(UIColor *)color time:(int)time retainerCycled:(BOOL)retainerCycled { 
    self = [super init]; 
    if (self) { 
     //configure our variables 
     // 7200 = 2h || 10800 = 3h 
     if (time < 7200) { 
      color = [UIColor greenColor]; 
     } else if (time >= 7200 && time < 10800) { 
      color = [UIColor yellowColor]; 
     }else if (time > 10800) { 
      color = [UIColor redColor]; 
     } 

     //save the entrie 
     //increment the number of saved dots by one 
     [[NSUserDefaults standardUserDefaults] setInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"dotNumber"] + 1 forKey:@"dotNumber"]; 
     //save the array with a key which is dotNumber followed by the number of the dot 
     NSString *keyString = [NSString stringWithFormat:@"dot%i", [[NSUserDefaults standardUserDefaults] integerForKey:@"dotNumber"]]; 

     [[NSUserDefaults standardUserDefaults]setObject:[NSArray arrayWithObjects:dateTime,color,time,retainerCycled, nil]forKey:keyString]; 


    } 
    return self; 
} 

-(NSArray *)getDotForNumber:(int)dotNumber { 
    //create the key string with the number passed to us 
    NSString *keyString = [NSString stringWithFormat:@"dot%i", dotNumber]; 

    //get array 
    NSArray *array = [[NSUserDefaults standardUserDefaults] arrayForKey:keyString]; 

    return array; 
} 

-(NSMutableArray *)getAllDots { 
    NSMutableArray *allDots; 

    for (int a = 1; a <= [[NSUserDefaults standardUserDefaults] integerForKey:@"dotNumber"]; a++) { 
     //create the key string 
     NSString *keyString = [NSString stringWithFormat:@"dot%i", a]; 

     //get array back 
     NSArray *array = [[NSUserDefaults standardUserDefaults] arrayForKey:keyString]; 

     //add array to the allDots array 
     [allDots addObject:array]; 
    } 

    return allDots; 
} 

我打電話創建陣列第一類,所述密鑰由之前保存的陣列的數目來確定這就是我們保存的變量的來源。每次創建一個新數組時,我們都會將其增加1。這也使我們能夠用一個特殊的號碼來識別每個'點'。我們在getDotForNumber:方法中使用該數字。爲了得到所有的點,我們從保存在NSUserDefaults中的變量中獲得已經創建的數組的數量並運行for循環。然後,我們將我們創建的每個數組添加到NSMutableArray,現在我們所要做的就是稍後使用objectAtIndex提取它:在另一個for循環中並在那裏執行所有代碼。

回答

1

點擊文件>新建>選擇目標C類

名稱類的點和子類NSObject的

這將創建兩個文件dots.h和dots.m

在dots.h

@interface dots : NSObject 

@property (nonatomic, strong) NSDate* dateAndTime; 
..... other properties of your object 

@end 

在dots.m

- (id)init { 
    self = [super init]; 
    if (self) { 

     //do here what you need to do on initialisation of object (like setting the color depending on the time of day) 
    } 
    return self; 
    } 
+0

如何檢索點? – ge0rges

+0

您只需在視圖控制器中創建它們:'#import dots.h'在頂部,然後'dots * dot = [[dots alloc] init];' – Mika

+0

好吧,這樣就可以創建一個點。但是我想存儲它們,以便稍後可以像上面那樣在集合視圖中顯示它們。我怎麼做?我應該使用數組嗎? – ge0rges

相關問題