我对Objective-C中的块使用有点困惑.我目前使用ARC,我的应用程序中有很多块,目前总是指代self而不是弱引用.这可能是这些区块保留self并防止被解除分配的原因吗?问题是,我应该总是使用块中的weak引用self吗?
-(void)handleNewerData:(NSArray *)arr
{
ProcessOperation *operation =
[[ProcessOperation alloc] initWithDataToProcess:arr
completion:^(NSMutableArray *rows) {
dispatch_async(dispatch_get_main_queue(), ^{
[self updateFeed:arr rows:rows];
});
}];
[dataProcessQueue addOperation:operation];
}
Run Code Online (Sandbox Code Playgroud)
ProcessOperation.h
@interface ProcessOperation : NSOperation
{
NSMutableArray *dataArr;
NSMutableArray *rowHeightsArr;
void (^callback)(NSMutableArray *rows);
}
Run Code Online (Sandbox Code Playgroud)
ProcessOperation.m
-(id)initWithDataToProcess:(NSArray *)data completion:(void (^)(NSMutableArray *rows))cb{
if(self =[super init]){
dataArr = [NSMutableArray arrayWithArray:data];
rowHeightsArr = [NSMutableArray new];
callback = cb;
}
return self;
}
- (void)main {
@autoreleasepool {
...
callback(rowHeightsArr);
}
}
Run Code Online (Sandbox Code Playgroud) iphone weak-references objective-c ios automatic-ref-counting
我正在尝试更改后退按钮箭头

我目前正在使用以下内容来控制文本大小以及后退按钮上的文本颜色:
[[UIBarButtonItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], UITextAttributeTextColor,
[UIFont boldSystemFontOfSize:16.0f], UITextAttributeFont,
[UIColor darkGrayColor], UITextAttributeTextShadowColor,
[NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset,
nil] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
但如果我只想改变后退按钮的箭头颜色,我该怎么办?
在iOS 7中,方法:
- (CGSize)sizeWithFont:(UIFont *)font
constrainedToSize:(CGSize)size
lineBreakMode:(NSLineBreakMode)lineBreakMode
Run Code Online (Sandbox Code Playgroud)
和方法:
- (CGSize)sizeWithFont:(UIFont *)font
Run Code Online (Sandbox Code Playgroud)
不推荐使用.我怎样才能更换
CGSize size = [string sizeWithFont:font
constrainedToSize:constrainSize
lineBreakMode:NSLineBreakByWordWrapping];
Run Code Online (Sandbox Code Playgroud)
和:
CGSize size = [string sizeWithFont:font];
Run Code Online (Sandbox Code Playgroud) 我在App Delegate中设置了本地通知使用此方法:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UILocalNotification *notification = [[UILocalNotification alloc]init];
[notification setAlertBody:@"Watch the Latest Episode of CCA-TV"];
[notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:5]];
[notification setTimeZone:[NSTimeZone defaultTimeZone]];
[application setScheduledLocalNotifications:[NSArray arrayWithObject:notification]];
}
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序然后退出它时,我收到一条错误消息:
2014-06-07 11:14:16.663 CCA-TV [735:149070] 试图安排本地通知 {开火日期= 2014年6月7日星期六太平洋夏令时间11:14:21,时区= America/Los_Angeles (PDT)偏移-25200(日光),重复间隔= 0,重复计数= UILocalNotificationInfiniteRepeatCount,下一个开火日期= 2014年6月7日星期六太平洋夏令时间11:14:21,用户信息=(null)} 带警报但尚未收到用户显示警报的许可
如何获得显示警报的必要权限?
我无法调整tableHeaderView的大小.它简单不起作用.
1)创建UITableView和UIView(100 x 320 px);
2)将UIView设置为UITableView的tableHeaderView;
3)建立和去.一切都好.
现在,我想调整tableHeaderView的大小,所以我在viewDidLoad中添加了这段代码:
self.tableView.autoresizesSubviews = YES;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
self.tableView.tableHeaderView.frame = newFrame;
Run Code Online (Sandbox Code Playgroud)
tableHeaderView的高度应显示为200,但显示为100.
如果我写:
self.tableView.autoresizesSubviews = YES;
CGRect newFrame = myHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
myHeaderView.frame = newFrame;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
Run Code Online (Sandbox Code Playgroud)
然后它按照我想要的200高度开始.但我希望能够在运行时修改它.
我也试过这个,没有成功:
self.tableView.autoresizesSubviews = YES;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
self.tableView.tableHeaderView.frame = newFrame;
[self.tableView.tableHeaderView setNeedsLayout];
[self.tableView.tableHeaderView setNeedsDisplay];
[self.tableView …Run Code Online (Sandbox Code Playgroud) 我有一个接受块和完成块的方法.第一个块应该在后台运行,而完成块应该在调用方法的任何队列中运行.
对于后者我总是使用dispatch_get_current_queue(),但似乎它在iOS 6或更高版本中已被弃用.我应该用什么呢?
cocoa-touch objective-c grand-central-dispatch objective-c-blocks ios6
我刚刚开始使用Xcode 4,我正试图在项目中找到该文件,它存储了项目的所有Schemes.我想他们会存放在某个地方的xcodeproj目录中的文件中,但对于我的生活,我找不到哪一个.
我的所有项目都存储在SVN服务器上,我想将Scheme信息保存在项目中.现在,当您检查出一个新鲜的项目时,这些方案并没有随之而来.
编辑:玩这个多一点之后,似乎计划存储在每个作为单独的文件中xcuserdata/user.xcuserdata/xschemes/MyScheme.xscheme与xcschememanagement.plist文件,让他们全部整理.
那么我的新问题是,有没有办法将这些存储在每个项目范围而不是每个用户范围?这样当另一个开发人员打开同一个项目时,他会看到我设置的相同方案?
我刚刚使用iOS 6.0升级到xcode 4.5,它突出显示了我的XIB文件中所有UILabel的警告"ios版本6.0上不推荐使用的最小字体大小".有谁知道这是指什么以及如何解决它?
更新: 图片不再可用(位于https://skitch.com/hahmadi82/eyk51/cloud)
在试验iPhone应用程序开发时,我们有几个应该被删除的AppID - 除了我找不到任何删除它们的方法!我能用它做什么?
如果删除不可用,重命名,隐藏或永久禁用如何?
更新:
从2013年4月开始Apple允许删除AppID.Whoaa!
我在每个部分都有n个部分(已知数量)和X行(未知数量.每行都有一个UITextField.当用户点击"完成"按钮时,我想迭代每个单元格并使用UITextField进行一些条件测试.测试传递来自每个单元格的数据被写入数据库.如果没有,则显示UIAlert.循环遍历行的最佳方法是什么,如果有更优雅的解决方案,请建议.
ios ×6
iphone ×4
cocoa-touch ×3
ios7 ×2
objective-c ×2
uitableview ×2
app-store ×1
build ×1
deprecated ×1
font-size ×1
ios6 ×1
ios8 ×1
nsstring ×1
provisioning ×1
sizewithfont ×1
uilabel ×1
xcode ×1
xcode4 ×1