小编tra*_*uan的帖子

使用dispatch_sync进行死锁

{
    dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue", 0);

    dispatch_sync(myQueue, ^{

        //Do EXTREME PROCESSING!!!
        for (int i = 0; i< 100; i++) {
            [NSThread sleepForTimeInterval:.05];
            NSLog(@"%i", i);
        }

        dispatch_sync(dispatch_get_main_queue(), ^{
            [self updateLabelWhenBackgroundDone];
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

我在这里遇到了僵局.根据Apple文档

"dispatch_sync":"将一个块提交给调度队列以进行同步执行.与dispatch_async不同,此函数在块完成之前不会返回.调用此函数并以当前队列为目标会导致死锁."

但是,我执行外部dispatch_sync操作myQueue,然后ditpatch_sync在不同的队列中执行内部操作,即`main_queue.

无法找出死锁的原因.任何评论/帮助在这里都很感激.

iphone multithreading objective-c grand-central-dispatch

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

导航控制器栏正在被切断

如果通过选择隐藏状态栏status bar style = hide during application launch,我正在自定义uinavigation栏,如下所示

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed: @"navbar-iphone.png"]
                                       forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

当我得到这个:导航栏从顶部切断.

在此输入图像描述

在此输入图像描述

有关这种情况的任何想法以及如何解决它?

objective-c uinavigationcontroller ios ios7

5
推荐指数
1
解决办法
1255
查看次数

在目标C中创建NSString

可能重复:
我是否需要释放使用@"..."生成的NSString?

在Objective C中有两种方法可以创建NSString obj

方式1:

// string1 will be released automatically 

NSString* string1 = [NSString string]; 

// must release this when done 
Run Code Online (Sandbox Code Playgroud)

方式2

NSString* string2 = [[NSString alloc] init]; 

[string2 release];
Run Code Online (Sandbox Code Playgroud)

如果我做

NSString *string = @"This is a string";
Run Code Online (Sandbox Code Playgroud)

我的问题是上述声明属于哪种方式,我们应该放弃

iphone objective-c

4
推荐指数
1
解决办法
2669
查看次数

将'BOOL'(又名'signed char')隐式转换为'id',objc_setAssociatedObject

我使用关联的引用作为我的类别的属性的存储

头文件包含:

@interface UIImageView (Spinning)

@property (nonatomic, assign) BOOL animating;

@end
Run Code Online (Sandbox Code Playgroud)

实施是

- (void)setAnimating:(BOOL)value {
    objc_setAssociatedObject(self, animatingKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到了上面这一行的警告

Implicit conversion of 'BOOL' (aka 'signed char') to 'id' is disallowed with ARC
Run Code Online (Sandbox Code Playgroud)

如果你知道我在这里做错了什么,请帮助我们如何避免这个问题

objective-c ios objective-c-category

4
推荐指数
1
解决办法
8666
查看次数

如何避免gridView现在覆盖我的uilabel的情况:iphone

我现在拥有的是

View :
    1.UILabel :  show a text 
    2.A GMGridView : show a grid of views
Run Code Online (Sandbox Code Playgroud)

代码是

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        gridViewHolder.itemSpacing      =   SPACING;
        gridViewHolder.dataSource       =   self;
        gridViewHolder.actionDelegate   =   self;
    }
#pragma mark - GMGridViewDataSource
- (CGSize)GMGridView:(GMGridView *)gridView sizeForItemsInInterfaceOrientation:(UIInterfaceOrientation)orientation {
    return CGSizeMake(WIDTH, HEIGT);     
}
- (NSInteger)numberOfItemsInGMGridView:(GMGridView *)gridView {
    return [needs count];
}
- (GMGridViewCell *)GMGridView:(GMGridView *)gridView cellForItemAtIndex:(NSInteger)index {
    cell                =   [gridView dequeueReusableCell];
    CGSize size         =   [self GMGridView:gridViewHolder sizeForItemsInInterfaceOrientation:UIInterfaceOrientationPortrait];

    if (!cell)
        cell            =   [[GMGridViewCell alloc] init];  

    UIView      *innerView                  =   [[UIView …
Run Code Online (Sandbox Code Playgroud)

iphone gmgridview

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

如何圆角图像

为了绕过图像的角落,我正在做以下事情

UIImageView     *myView     =   [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];
[myView setImage:[UIImage imageNamed:@"xcode_57X57"]];
myView.layer.cornerRadius      =   10.0;
myView.layer.borderWidth       =   1.0;
myView.layer.borderColor       =   [UIColor blueColor].CGColor;
myView.layer.shadowRadius      =   8;
Run Code Online (Sandbox Code Playgroud)

但是,我得到的是myView的角落是圆形但是图像的角落.下图显示了我的问题.

如果您之前遇到过这个问题,请就此向我提出建议.

在此输入图像描述

iphone ios

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

为ZBarReaderViewController添加一个uibarbutton

我正在研究ZBarReader,到目前为止我所拥有的是

ZBarReaderViewController *controller = [[ZBarReaderViewController alloc] init];
controller.navigationController.navigationBarHidden = NO;
// Add Edit button to the right and handle click event UIBarButtonItem *manualButton = [[UIBarButtonItem alloc] initWithTitle:@"Manual" style:UIBarButtonItemStyleBordered target:self action:@selector(EditMode:)];
[controller.navigationItem setRightBarButtonItem:manualButton];
controller.readerDelegate = self;
[self presentModalViewController:controller animated:YES];
Run Code Online (Sandbox Code Playgroud)

我的问题是我们可以如此上面这样的事情:设置工具栏可见并在其上添加ZBarReaderViewController的按钮.

iphone

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

进入uitextview的第二行,UITextView,ios

我的观点包含:

first name ( UITextField )
last name  ( UITextField )
email      ( UITextField )
note       ( UITextView )
Run Code Online (Sandbox Code Playgroud)

图片如下 在此输入图像描述

输入返回键时,以下代码用于处理

- (BOOL)textFieldShouldReturn:(UITextField *)textField {    // invoked when user hits return of keyboard from a text field
    if ( textField      ==  self.firstName)
        [self.lastName becomeFirstResponder];
    else if (textField  == self.lastName)
        [self.email becomeFirstResponder];
    else if (textField  == self.email) {
        [self.note becomeFirstResponder];
    }

    return YES;

}
Run Code Online (Sandbox Code Playgroud)

当我在email现场击中时next,我正在降落,note但是在第二行,如下(浅蓝色光标在第二行) 在此输入图像描述

我不懂.光标应该在第一行note.

对这个问题有什么看法吗?

objective-c uitextfield uitextview uitextviewdelegate uitextfielddelegate

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

使用NSKeyedArchiver,ios进行读写

下面是使用nsarchive读取和写入数据的类

Data.m

-(id)init {
    self        =   [super init];
    if(self) {
        arr     =   [[NSMutableArray alloc] init];
    }
    return self;
}

-(NSString *)getPath {
    NSArray     *paths          =   NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString    *documentPath;

    if ([paths count] > 0)
        documentPath            =   [paths objectAtIndex:0];

    NSString *draftDataPath     =   [documentPath stringByAppendingPathComponent:@"draftData.dat"];
    return draftDataPath;
}

-(void)saveDataToDisk {
    NSString *path              =   [self getPath];
    [NSKeyedArchiver archiveRootObject:arr toFile:path];

}

-(void)loadDataFromDisk {
    NSString    *path           =   [self getPath];
    self.arr                    =   [NSKeyedUnarchiver unarchiveObjectWithFile:path];
}
Run Code Online (Sandbox Code Playgroud)

稍后,我arr通过CustomerClass.m 添加一些对象

- (void) viewDidLoad {

Data *data …
Run Code Online (Sandbox Code Playgroud)

iphone nskeyedarchiver

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

无法将形状图层添加到视图图层中

我正在CAShapeLayer使用 CAShapeLayer 创建一个图层,如下所示:

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.frame = CGRectMake(150, 50, 200, 200);
shapeLayer.fillColor = [UIColor whiteColor].CGColor;
shapeLayer.strokeColor = [UIColor orangeColor].CGColor;
[self.view.layer addSublayer:shapeLayer];
Run Code Online (Sandbox Code Playgroud)

但是,当我执行代码时,shapeLayer在模拟器/设备中看不到我的代码。
我在这里缺少什么。

PS:如果我使用CALayer *shapeLayer = [CALayer layer];它有效。困惑

cocoa-touch objective-c calayer cashapelayer ios

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

不能pushViewController

我正在关注HeadsUpUI的教程

我只是想添加额外的功能,例如如果我从悬停点击播放暂停按钮,我将移动到另一个名为NextViewController的视图控制器.

我做的是

1.-(IBAction)rightAction:(id)sender {

  1. //用户触摸了HoverView中的右键
  2. [self showHoverView:NO];
  3. NextViewController*controller = [[NextViewController alloc] initWithNibName:@"NextViewController"bundle:nil];
  4. [self.navigationController pushViewController:controller animated:YES]; }

点击暂停或播放按钮后,根本没有任何事情发生.但是,如果我替换第5行

[self presentModalViewController:controller animated:YES];

它的工作原理.

如果你知道问题是什么,有人可以建议我.欢迎任何评论.

iphone

0
推荐指数
1
解决办法
187
查看次数

我想我陷入僵局但不太明白为什么

我正在尝试使用GCD一个接一个地放置图像,如下所示

-(void)setUpImages {
    NSArray *images  =   @[[UIImage imageNamed:@"blogger-icon.png"],
                           [UIImage imageNamed:@"gplus-icon.png"],
                            [UIImage imageNamed:@"facebok-icon.png"]
                           ];
    [images enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
          dispatch_sync(dispatch_get_main_queue(), ^{
                UIImageView     *imageView  =   [[UIImageView alloc] initWithFrame:CGRectMake(80, idx * ((UIImage*)obj).size.height + idx*30 + 10, ((UIImage*)obj).size.width, ((UIImage*)obj).size.height)];
                NSLog(@"index is %@",NSStringFromCGRect(imageView.frame));

                [imageView setImage:(UIImage*)obj];
                [self.view.layer addSublayer:imageView.layer];
                sleep(1); 
            });
    }];

}
Run Code Online (Sandbox Code Playgroud)

我正在使用,dispatch_sync因为我希望它会等到它的块完成(第一个图像放在屏幕上)然后第二个图像将是,所以第三个图像.现在所有的事情都发生在主线上.

但是,似乎我在中间遇到了僵局,我的逻辑在某些方面是错误的.

我需要帮助来了解这种情况.请帮忙.

multithreading objective-c grand-central-dispatch ios

0
推荐指数
1
解决办法
129
查看次数