2013-03-27 25 views
3

我仍然在努力提高"My Second iOS App",這是蘋果公司提供的教程。以下是故事板的圖片,並添加了對應該發生的評論的評論。「你的第二個iOS應用程序」:我如何實現一個Singleton?

detail of the storyboard with added commentary

當完成按鈕(步驟3)點擊,實際屏幕應該返回到主菜單(3.A),而成品BirdSightingObject應加的BirdMasterViewController列表(3.B )。所以我認爲我可以使用Singleton,因爲可以只有一個對象同時添加,並且使得從不同類訪問更容易。

在本教程中,已經爲數據處理「BirdSighting」給出了一個類,它可能可以用作單例。但正如我OOP和設計模式的只有初級水平的知識,我不知道,如果我可以用這個,或者如果我不得不寫我自己在參考現有的類。

其次:我沒有絲毫的想法如何訪問BirdMasterViewController(IBAction)done方法,最終保存對象在列表中。

注意:以下源代碼部分由Apple,Inc.提供。請參閱this以查看本教程的完整代碼清單。沒有任何版權的權利。

BirdSighting.h

@interface BirdSighting : NSObject 

@property (nonatomic, copy) NSString *name; 
@property (nonatomic, copy) NSString *location; 
@property (nonatomic, strong) NSDate *date; 

- (id)initWithName:(NSString *)name location:(NSString *)location date:(NSDate *)date; 
- (id)initWithNameOnly:(NSString *)name date:(NSDate *)date; 

@end 

BirdSighting.m

#import "BirdSighting.h" 

@implementation BirdSighting 

- (id)initWithName:(NSString *)name location:(NSString *)location date:(NSDate *)date 
{ 
    self = [super init]; 
    if (self) 
    { 
     _name = name; 
     _location = location; 
     _date = date; 
     return self; 
    } 
    return nil; 
} 

-(id)initWithNameOnly:(NSString *)name date:(NSDate *)date 
{ 
    self = [super init]; 
    if (self) 
    { 
     _name = name; 
     _date = date; 
     return self; 
    } 
    return nil; 
} 

@end 

(IBAction)done方法,在MainMenuViewController.m

- (IBAction)done:(UIStoryboardSegue *)segue 
{ 
    if ([[segue identifier] isEqualToString:@"ReturnInput"]) 
    { 
     AddLocationToSighting *addController = [segue sourceViewController]; 
     if (addController.birdSighting) 
     { 
      [self.dataController addBirdSightingWithSighting:addController.birdSighting]; 
      [[self tableView] reloadData]; 
     } 
     [self dismissViewControllerAnimated:YES completion:NULL]; 
    } 
} 

總結:

  • 可以將BirdSighting轉換成單例嗎?如果是這樣,缺少什麼? (不需要爲我編碼,我希望如果您提供提示,我可以自己做。)
  • 如何將對象保存在BirdMasterViewController我不知道如何訪問noninvolved的ViewController在(IBAction)done
+0

P.S .:如果我的問題是具體的,或者如果我應該分開這兩個問題,請讓我知道。我對Stackoverflow也很新。 – RNelke 2013-03-27 08:45:14

+0

我猜這裏的人不允許幫助其他人,不管他們能否幫忙。祝你好運@RNelke – 2013-03-27 09:03:31

+0

@DipenPanchasara我們不允許的是質量低下的答案,他們可能被認爲對提問者毫無價值。這個網站不是關於如何通過cruft進行的,而是要把質量的答案和問題放在每個人都可以看到他們並向他們學習的地方。我不是故意在那裏粗魯的,只是我們期望這裏的帖子質量更高。 – CodaFi 2013-03-27 09:06:20

回答

4

我可以將BirdSighting轉換爲單例嗎?

BirdSighting模型對象,不是一個集合,當然也不需要全局訪問的變量。但是,您可以創建一個單體鳥類觀鳥管理器,它可以控制鳥類目擊的列表,並可以根據需要添加,刪除或序列化它們。雖然,請記住,單身人士創造了全球性的國家,這總是一件壞事。

如何將對象保存在BirdMasterViewController中?

這又一次回到了上面提到的單例。我還會建議添加控制器和主列表視圖之間的某種形式的委託,但我認爲這可能是所有中間視圖控制器的挑戰。即使通知也可以工作(在info參數中有新的目擊)。

+0

謝謝你的回答。我理解我的錯誤思想,我可以將BirdSighting轉換成單身。但是我之前沒有和委託人一起工作過,也不知道'info'參數是什麼意思。你可以詳細介紹一下,或者把我和一個教程聯繫起來解釋一下嗎? – RNelke 2013-03-27 09:00:50

+0

不要轉換類,寫一個新的控件,以控制這些鳥的目擊數組。忽略代表團的想法,在評論中解釋有點困難。通知事情很簡單:按完成後,[廣播通知](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html)。讓主視圖控制器監聽並對其做出反應。 – CodaFi 2013-03-27 09:03:29

+0

當你看到一個可以被多次渲染的物體時(世界上不只有一隻鳥在發現!)你最後想到的是一個單身。在我看來,單身人士是最後的選擇。在應用程序中的全局狀態只是填充你通過瀏覽來獲取實際有用的代碼。這就是說,對於簡單的問題,它們就足夠了。 – CodaFi 2013-03-27 09:09:12

相關問題