2016-08-02 28 views
-1

我想开发一个云存储应用程序,我想实现该用户可以将文件或文件夹移动到另一个文件夹。如何使特定观察者听到的NSNotification?

-(void)setUpNote{ 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MoveCopypopViewClicked:) name:@"MoveCopypopViewClickedNotification" object:nil]; 
} 

我设置了一个标记thisIsOnTop来标记顶部的视图。

-(void)viewWillAppear:(BOOL)animated{ 
self.thisIsOnTop = YES; 

[super viewWillAppear:YES]; 

self.myPopView = [[MoveCopyPopView alloc]initWithFrame:CGRectMake(0, screenH, screenW, bottomH)]; 

[HBKeyWindow addSubview:self.myPopView]; 

[UIView animateWithDuration:0.5 animations:^{ 
    self.myPopView.frame = CGRectMake(0, screenH - bottomH, screenW, bottomH); 
}]; 
[self setupRefresh]; 
} 

-(void)viewWillDisappear:(BOOL)animated{ 
self.thisIsOnTop = NO; 
if (self.tableViewStatus == 1) { 
    //[self.tableView setEditing:!self.tableView.editing animated:YES]; 
    self.tableViewStatus = 0; 
    [self disapperPopView]; 
} 
} 

-(void)MoveCopypopViewClicked:(NSNotification *)text{ 
NSDictionary * dict = text.userInfo; 
NSString * btnClicked = [dict objectForKey:@"btnClicked"]; 
self.mycurrentPOPBtnClicked = btnClicked; 

if ([self.myChooseType isEqualToString:@"file"]) { 
    if ([btnClicked isEqualToString:@"CreateFolderBtnClicked"]) { 

     [self showNewFolderView]; 

    }else if ([btnClicked isEqualToString:@"ConfirmBtnClicked"]){ 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"MoveCopypopViewClickedNotification" object:nil userInfo:self.prepareToPushFolderID]; 

     for (UIViewController *temp in self.navigationController.viewControllers) { 
      if ([temp isKindOfClass:[MyDesignTableViewController class]]) { 
       [self.navigationController popToViewController:temp animated:YES]; 
      } 
     } 

     [self disapperPopView]; 
     [self.tableView reloadData]; 
     [self.tableView.mj_header beginRefreshing]; 
    } 
}else if ([self.myChooseType isEqualToString:@"folder"]){ 
    if ([btnClicked isEqualToString:@"CreateFolderBtnClicked"]) { 
     [self showNewFolderView]; 

    }else if ([btnClicked isEqualToString:@"ConfirmBtnClicked"]){ 

     [self loadMoveFolderRequest]; 

     [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES]; 

     [self disapperPopView]; 
     [self.tableView reloadData]; 
     [self.tableView.mj_header beginRefreshing]; 
    } 
} 
} 

当我移动文件并选择目标文件夹并单击确认移动按钮时,文件未移动到我选择的文件夹。

+0

你在哪里调用'postNotification'? – Thilo

+0

为什么你在这行有'YES':'[super viewWillAppear:YES];'? – Avi

+0

发布的代码中没有关于移动文件的信息,也没有关于通知的信息。 – Avi

回答

2

您需要实际发布通知才能激活“观察者”。

编辑:

需要注意的是,如果你想收到folderID在loadMoveRequest方法,那么它应该是“选择”中的addObserver像这样:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadMoveRequest:) name:@"MoveCopypopViewClickedNotification" object:nil]; 

将您发布的通知,并通在folderID:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MoveCopypopViewClickedNotification" object:nil userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:folderID] forKey:@"folderID"]]; 

如果你需要通过一些具体的通知数据,你可以通过设置NSDictionary到这样做而不是通过nil

最后实现loadMoveRequest:方法如下所示:

- (void)loadMoveRequest:(NSNotification *notification) { 

    NSInteger folderId = [[[notification userInfo] objectForKey:@"folderID"] integerValue]; 

} 
+0

当我点击确认按钮时我想将当前viewController的folderID传递给'loadMoveRequest' – Matrix

+0

folderID属性是什么类型?您可以传递Dictionary中的folderID并将其设置为userInfo。如果它是一个整数,你可以像下面这样将它传递给一个NSNumber:[NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:folderID] forKey:@“folderID”];将其设置为'userInfo' – akdsouza

+0

请注意,如果您想要在loadMoveRequest方法中接收到folderID,那么它应该是addObserver中的'选择器',如下所示: – akdsouza

0

您需要处理的观察者在类/视图 - 控制在您已写入到移动文件的功能如下:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MoveCopypopViewClicked:) name:@"MoveCopypopViewClickedNotification" object:nil]; 

然后,你必须写函数名称MoveCopypopViewClicked这将有代码移动在该类/ viewcontroler的文件。

然后你需要触发通知如下;

[[NSNotificationCenter defaultCenter] postNotificationName:@"MoveCopypopViewClickedNotification" object:nil userInfo:nil]; 

,并与此通知传递值,您可以通过的NSDictionaryUSERINFO

+0

我已编辑'MoveCopypopViewClicked',调试错误显示终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [__ NSCFConstantString objectForKey:]:无法识别的选择器发送到实例0x10b40c220'' – Matrix

+0

您还没有通过正确的NSDictionary在通知中。它说你传递的值是** NSCFConstantString **类型 – Rohan