小编S.J*_*S.J的帖子

NSNotificationCenter removeObserver无法正常工作

-(void)viewDidAppear:(BOOL)animated {
            NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
                [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification object:nil queue:mainQueue usingBlock:^(NSNotification *note) {
                    NSLog(@"SShot");
            }];
        }

- (void)viewWillDisappear:(BOOL)animated{
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationUserDidTakeScreenshotNotification object:nil];
    NSLog(@"VWD");
        }

 -(void)viewDidDisappear:(BOOL)animated {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationUserDidTakeScreenshotNotification object:nil];
        NSLog(@"VDD");
    }
Run Code Online (Sandbox Code Playgroud)

SShot删除了观察者后,我正在登录控制台.

有没有其他方法可以删除UIApplicationUserDidTakeScreenshotNotification观察者.

objective-c nsnotificationcenter ios

4
推荐指数
2
解决办法
2865
查看次数

Objective-c多播代表

我在xcode中创建了新的选项卡式视图项目,在appdelegate中我创建了一个协议

.h文件

@protocol myProtocol <NSObject>
-(void)myProtocolMethodOne;
@end
.
.
.
@property (weak) id<myProtocol> mypDelegate;
Run Code Online (Sandbox Code Playgroud)

.m文件

@synthesize mypDelegate;
.
.
.
//Inside didFinishLaunchingWithOptions
[mypDelegate myProtocolMethodOne];
Run Code Online (Sandbox Code Playgroud)

在firstViewController和secondViewController中(两者都显示为两个不同的选项卡)我在两者中都这样做了

AppDelegate *ad = (AppDelegate*)[[UIApplication sharedApplication]delegate];
    [ad setMypDelegate:self];
.
.
.
-(void)myProtocolMethodOne
{
    NSLog(@"1st VC");
    [[self tabBarItem]setBadgeValue:@"ok"];
}
Run Code Online (Sandbox Code Playgroud)

代码工作正常,但只有secondViewController响应.

我正在寻找一种使用委托而不是通知的广播和监听器机制.

我搜索了很多,但没有找到任何解决方案,除了这个,但代码是提前为我明白,所以我采取了循序渐进的方式通过启动形式一个简单的项目明白这一点.请帮我解决这个问题.两个视图控制器如何同时响应委托,我该怎么办?

protocols objective-c ios

3
推荐指数
2
解决办法
4444
查看次数

Autolayout在iOS 10中没有动画效果,但在iOS 9中运行良好

- (IBAction)btnA:(id)sender {
    if(self.height.constant == 300) {
         self.height.constant = 50;
    } else {
         self.height.constant = 300;
    }

    [self.subView1 setNeedsUpdateConstraints];

    [UIView animateWithDuration:1.0 animations:^{
        [self.subView1 layoutIfNeeded];
    }];
}
Run Code Online (Sandbox Code Playgroud)

我正在使用这个代码,但iOS10它没有动画它只是跳跃增加和减少mySubview1高度.为什么?

相同的代码工作正常 iOS9

objective-c uiview ios autolayout ios-autolayout

3
推荐指数
1
解决办法
1584
查看次数

self.navigationController.tabBarController.selectedIndex不起作用

我有一个UITabBarController包含4个不同的UIViewControllers.

在第一个选项卡上有一个UINavigationViewController包含其子项的选项卡UIViewController.没有点击标签栏,我想让用户在第二个选项卡上.为此,我试过:

self.navigationController.tabBarController.selectedIndex = 1;

但它不起作用.

忽略任何错误我是新手.

谢谢.

uitabbarcontroller uiviewcontroller uinavigationcontroller ios

2
推荐指数
2
解决办法
2万
查看次数

如何以编程方式选择uitableview行

我想尝试在uitableview中选择所有功能的电子邮件,在同一个按钮点击用户可以勾选或删除所有复选标记,此外用户还可以选择/取消选择行(在didSelectRowAtIndexPath上).我试着做但不能正常工作,这是我的代码.

- (IBAction)selectAll:(id)sender
{
    if(myBoolean)
    {
        for (NSInteger s = 0; s < self.iTable.numberOfSections; s++)
        {
            for (NSInteger r = 0; r < [self.iTable numberOfRowsInSection:s]; r++)
            {
                [[self.iTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:r inSection:s]] setAccessoryType:UITableViewCellAccessoryNone];
            }
        }

        myBoolean = NO;

        [_selectUnselectButton setTitle:@"Select all Friends" forState:UIControlStateNormal];
    }
    else
    {
        for (NSInteger s = 0; s < self.iTable.numberOfSections; s++)
        {
            for (NSInteger r = 0; r < [self.iTable numberOfRowsInSection:s]; r++)
            {
                [[self.iTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:r inSection:s]] setAccessoryType:UITableViewCellAccessoryCheckmark];
                NSLog(@"%d-%d",s,r);
            }
        }

        myBoolean = YES;

        [_selectUnselectButton setTitle:@"Unselect all …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c uitableview ios

2
推荐指数
2
解决办法
2万
查看次数

需要有关@autoreleasepool的帮助

关于@autoreleasepool的高级内存管理编程指南说:

使用本地自动释放池块来减少峰值内存占用量

许多程序创建自动释放的临时对象.这些对象会添加到程序的内存占用空间,直到块结束.在许多情况下,允许临时对象累积直到当前事件循环迭代结束时不会导致过多的开销; 但是,在某些情况下,您可能会创建大量临时对象,这些对象会大大增加内存占用,并且您希望更快地处置.在后面这些情况下,您可以创建自己的自动释放池块.在块结束时,临时对象被释放,这通常导致它们的释放,从而减少程序的内存占用.

以下示例显示了如何在for循环中使用本地自动释放池块.

NSArray *urls = <# An array of file URLs #>;
for (NSURL *url in urls) {

    @autoreleasepool {
        NSError *error;
        NSString *fileContents = [NSString stringWithContentsOfURL:url
                                         encoding:NSUTF8StringEncoding error:&error];
        /* Process the string, creating and autoreleasing more objects. */
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码也可以在没有autoreleasepool的情况下编写并有效管理吗?

比如在处理它之后创建property of fileContents并设置nil它.

self.filecontents = nil;
Run Code Online (Sandbox Code Playgroud)

objective-c nsautoreleasepool ios

2
推荐指数
1
解决办法
258
查看次数

需要有关理解typedef和块的帮助

typedef void (^RequestProductsCompletionHandler)(BOOL success, NSArray * products);
Run Code Online (Sandbox Code Playgroud)

我很难理解这行代码在.h文件中的作用.

请详细解释

  1. 的typedef.
  2. 无效(我知道什么是无效的,但这里的目的是什么?).
  3. (^ RequestProductsCompletionHandler)(BOOL成功,NSArray*产品);
  4. 怎么称呼它?

objective-c ios objective-c-blocks

2
推荐指数
2
解决办法
416
查看次数

UITableView中的多个委托/数据源

Objective-c一次delegates招待一个instance,就像我有两个view controllers并且都实现相同的委托,但只有当前呈现的view controller接收回调.

如果我有两个uitableviews相同的view controller两个uitableview's delagates datasource都设置为

tb1.datasource = self; 
tb2.datasource = self;

tb1.delegate = self; 
tb2.delegate = self;
Run Code Online (Sandbox Code Playgroud)

uitableview如何与代表同时定义?

delegates objective-c ios

2
推荐指数
1
解决办法
2238
查看次数

UILocalNotification会在iOS 10上崩溃吗?

这是当前的UILocalNotification类,这是苹果刚刚在wwdc 16中宣布的iOS 10 UserNotification.

使用的旧应用程序UILocalNotification是否会在iOS 10上崩溃?

objective-c ios uilocalnotification swift ios10

2
推荐指数
1
解决办法
1535
查看次数

为什么objective-c NS_ENUM 变量自动有默认值

我创建了一个这样的枚举

typedef NS_ENUM(NSInteger, PermissionStages) {
    thePermissionNotDetermine = 0,
    thePermissionDenied = 1,
    theReminderPermissionAllowed = 2,
};
Run Code Online (Sandbox Code Playgroud)

并创建一个这样的变量

PermissionStages PermissionStageVar;
Run Code Online (Sandbox Code Playgroud)

我没有给它分配任何值,但默认情况下它variablePermissionStages enum第一个值,在这种情况下它的thePermissionNotDetermine

为什么会出现这种行为?

enums objective-c ios

2
推荐指数
1
解决办法
2827
查看次数