2013-07-25 130 views
1

目标C中的任何事情都会让我一次又一次感到最疯狂。在另一个类中调用方法的最简单方法是什么?

(使用电弧)(请原谅我,如果我有什么错的术语)

使用ddmenucontroller我加载2菜单的类似于Facebook的应用程序;左控制器和右控制器

在RightController.h和m我拉一个httprequest并加载一个朋友列表。 从LeftController.h和m加载,我有一个添加好友视图控制器。

当一个朋友从AddFriendsViewController.h和M加入,我需要通过调用更新的RightController好友列表 - (无效)getFriends

我已经试过通知,我已经尝试设置共享的情况下,似乎没有任何的大部分我所看到的是我仍然需要调用viewDidLoad中getFriends在RightController.m,每次我改变,它的例子为我工作:(我最大的问题,我装RightController时崩溃

请让我知道任何人想看什么代码;我已经删除了我试过的一切,因为它不工作...

回答

1

您需要从视图和视图控制器中抽取下载和数据存储(请参阅MVC)。也许有一个单身人士来管理你的所有数据。现在,任何视图控制器都可以触发新的下载,任何视图控制器都可以观察新数据。如果您的单身人士获取新数据,只需发布​​通知。在你的视图控制器中,当它们被显示时作为观察者添加,当它们被隐藏时被删除。视图控制器也可以在任何时候通过显式调用单例来检查新数据。


你的单接口可以是这样的:

#define MY_NEW_DATA_NOTIFICATION @"MY_NEW_DATA_NOTIFICATION" 

@interface MyDataController : NSObject 

@property (strong, nonatomic, readonly) NSArray *downloads; 

+ (MyDataController *)sharedController; 

- (void)startDownload; 

@end 
+0

这有点合理。你可以发布一个例子或一个例子的链接吗? – lsiunsuex

+0

绝对要注意什么韦恩说,大约从视图和视图控制器 – Tim

0

韦恩:你的回答让我在正确的轨道

RightController.h

@interface RightController : UIViewController 
{ 
    NSMutableArray *offerArray; 
    NSArray *find_list; 

    UITableView *myTableView; 
    NSMutableArray *dataSource; 
    NSMutableArray *tableData; 
    NSMutableArray *addrData; 

} 
+ (RightController *)sharedController; 

-(void) getFriends; 

@end 

RightController.m

- (id)init { 
    if ((self = [super init])) { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getFriends) name:@"rightControllerGetFriends" object:nil]; 
    } 
    return self; 
} 

和AddFriendsViewController.m

- (IBAction) TellAFriendPressed:(id)sender 
{ 
... 
[[NSNotificationCenter defaultCenter] postNotificationName:@"rightControllerGetFriends" 
                  object:nil]; 

} 

谢谢您的帮助!

+0

呀,你所做的是忽视的重要组成部分(关注点分离)提取您的下载和数据存储离开,走的代码片段,并将其应用完全错误的方式。也许工作,但这并不作出正确的/好/好...阅读有关MVC http://en.wikipedia.org/wiki/Model-view-controller – Wain

0

您是否尝试过使用KVO?这是它创造的东西。

相关问题