因为我发现AutoLayout我到处都使用它,现在我正在尝试使用它tableHeaderView.
我做了subclass一些UIView添加的东西(标签等......)我想要他们的约束,然后我把它添加CustomView到UITableView' tableHeaderView.
一切都工作得很好,除了UITableView总是显示上面的CustomView,通过以上我指的CustomView是下的UITableView,因此它不能被看到!
看来,无论我做什么,对height的UITableView" tableHeaderView是始终 0(所以是宽度,x和y).
我的问题:如果不手动设置框架,是否可以完成此操作?
编辑:我正在使用
的CustomView' subview有这些限制:
_title = [[UILabel alloc]init];
_title.text = @"Title";
[self addSubview:_title];
[_title keep:[KeepTopInset rules:@[[KeepEqual must:5]]]]; // title has to stay at least 5 away from the supperview Top
[_title keep:[KeepRightInset …Run Code Online (Sandbox Code Playgroud) 当我做:
IO.inspect [:right, :top, :left, ...very_long_list]
Run Code Online (Sandbox Code Playgroud)
我只得到第一项(这是解决15拼图的动作列表),如下所示:
[:right, :top, :left, :bot, :bot, :left, :top, :top, :right, :right, :bot,
:left, :bot, :left, :top, :right, :bot, :right, :top, :top, :left, :bot,
:left, :top, :right, :right, :bot, :bot, :left, :top, :top, :left, :bot,
:right, :top, :right, :bot, :left, :left, :top, :right, :bot, :right, :top,
:left, :left, :bot, ...] # => See the '...'
instead I would like
to get the complete list
Run Code Online (Sandbox Code Playgroud)
如何判断IO.inspect不修剪清单?有选择还是什么?
也许这不属于SO,但我不知道在哪里.
我不得不重新实现printf(3)与C不使用,会做的转换对我有什么功能,我几乎做了,但我坚持上%a,我真的不明白发生了什么位置,例如:
printf("%a\n", 3.0); //#=> 0x1.8p+1
printf("%a\n", 3.1); //#=> 0x1.8cccccccccccdp+1
printf("%a\n", 3.2); //#=> 0x1.999999999999ap+1
printf("%a\n", 3.3); //#=> 0x1.a666666666666p+1
printf("%a\n", 3.4); //#=> 0x1.b333333333333p+1
printf("%a\n", 3.5); //#=> 0x1.cp+1
printf("%a\n", 3.6); //#=> 0x1.ccccccccccccdp+1
Run Code Online (Sandbox Code Playgroud)
我当然读到了那个说:
double参数被舍入并在样式[ - ] 0xh.hhhp [+ - ] d中转换为十六进制表示法,其中十六进制点字符后面的位数等于精度规范.
但是,这并不能真正帮助我不明白的过程是转换3.2到1.999999999999ap+1
我不需要任何代码,但更多的解释.
PS:如果这不是这个问题的地方,你可以指引我到正确的地方吗?
编辑:虽然@juhist答案适用于数字> = 1.0它没有解释如何获得0.0et 之间的数字结果1.0:
printf("%a\n", 0.01); //#=> 0x1.47ae147ae147bp-7
printf("%a\n", 0.1); //#=> 0x1.999999999999ap-4
printf("%a\n", 0.2); //#=> 0x1.999999999999ap-3
printf("%a\n", 0.3); //#=> 0x1.3333333333333p-2 …Run Code Online (Sandbox Code Playgroud) 我有一个包含所有数据的NSDictionary:
我在基于视图的表视图中显示这些数据,如下所示:
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tv
{
if (tv == _downloadTable)
//I use this "if" because I have another tableView that has nothing to do
//with this one
{
return [[myDictionary objectForKey:@"myArray"] count];
}
}
Run Code Online (Sandbox Code Playgroud)
我想要2列tableView,一列用于显示标题,另一列用复选框,这样可以让我知道哪一行被选中.
- (NSView *)tableView:(NSTableView *)tv viewForTableColumn :(NSTableColumn *)tableColumn row :(NSInteger)row
{
if (tv == _downloadTable)
{
if (tableColumn == _downloadTableTitleColumn)
{
if ([[[myDictionary objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"])
{
NSString *title = [[[myDictionary objectForKey:@"myArray"]objectAtIndex:row]objectForKey:@"title"];
NSTableCellView *result = [tv makeViewWithIdentifier:tableColumn.identifier owner:self];
result.textField.stringValue = title;
return result; …Run Code Online (Sandbox Code Playgroud) 所以我Core Data用来存储一些图像.(也是最新生成的子类mogenerator)
(而且我也在使用ARC)
是的,我知道我可以保留一个参考并将其存储在磁盘上,但我想:
"嘿,他们做了一个选择,所以我可以做到这一点,而不必亲自管理它!"
所以我尝试了它并且它完美地工作,除了所有加载的数据从未发布.


在ViewController的初始化中,谁将负责显示图像,我给它通常的主要NSManagedObjectContext.
在viewDidAppear我调用的方法中,我设置了UIScrollView图像:
编辑:所以这不是一个真正的获取请求,我有Entity1一对多的图像,我用它来获取我从同一个上下文得到这个entity1的图像.我只想简化以便更好地解释.
- (void)setupScrollViewWithEntity1:(Entity1 *)entity1 {
DDLogVerbose(@"-- %@ : SETUP SCROLL VIEW --", self);
// I remove any previous subviews
[self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
self.scrollView.contentSize = self.scrollView.frame.size;
/* Here I get the imagesArray with a NSFetchRequest */
//So it's not really a fetch request I have an `Entity1` which have one-to-many with images and I use it to get the images …Run Code Online (Sandbox Code Playgroud) 作为一个练习,我有一个奇怪的问题:
编写一个函数,该函数将指针的指针的指针指针指向int的指针的指针作为参数,并为其赋值.
我认为我写的功能是对的(请更正,如果不是)但我该如何测试呢?
void function(int *********anInt)
{
*********anInt = 5;
}
Run Code Online (Sandbox Code Playgroud)
我试过了 :
int main(void) {
int *********nbr = malloc(sizeof(int));
function(nbr);
printf("%d", *********nbr);
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个段错误,我只是了解malloc和pointers,所以我不完全理解.
所以我已经考虑了几天了,我似乎无法找到一个好的方法来使它工作.
我有一个NSOperationQueue只允许一次一个操作.我从文档中了解到:
在OS X v10.6及更高版本中,取消操作会导致操作忽略它可能具有的任何依赖性.此行为使队列可以尽快执行操作的start方法.反过来,start方法将操作移动到完成状态,以便可以从队列中删除它.
当我发送取消时它将设置isCancelled为YES,但我的问题是:
假设我有20个NSOperation队列而且我刚刚取消了18号,它将一直保持NSOperationQueue到它可以运行并说它已经完成(我的NSOperation检查正确isCancelled)但是因为它保留在队列中它也保留在UITableView我设置dataSource的东西中喜欢myOperationQueue.operations.
这就是困扰我的用户,用户将点击Cancel将调用该cancel方法,NSOperation但操作仍会显示,因为它仍然在队列中.
我考虑过start在cancel方法中调用,但不允许只有队列才可以start.
编辑:我也试着重写isFinished的cancel:
[self willChangeValueForKey:@"isFinished"];
_isFinished = YES;
[self didChangeValueForKey:@"isFinished"];
Run Code Online (Sandbox Code Playgroud)
它工作但它也发送start到NSOperation队列中的下一个,它可以导致同时有2个NSOperation,我只想要一个.
我一直在阅读有关UISearchDisplayController它的所有文档,delegate但是当搜索条件发生变化时,我找不到任何方法来动画表格视图.
我正在使用这两种方法:

他们都返回,YES但仍然找不到任何方法做类似的事情:

我不知道这是否是重要的,但我使用的是NSfetchedResultsController 填充UITableView在UISearchDisplayController
那是谢谢!
core-data uitableview uisearchdisplaycontroller nsfetchedresultscontroller
我创建了一个NSOperation目标是从20个URL下载一些图像(如20).所以在这里NSOperation我创建20 AFImageRequestOperation添加它们NSOperationQueue并调用-waitUntilAllOperationsAreFinished队列.
问题是,它不等待,它立即返回.这是代码
- (void)main {
NSArray *array = [I have the 20 links stored in this array];
self.queue = [[NSOperationQueue alloc]init];
self.queue.maxConcurrentOperationCount = 1;
for (int i = 0; i < array.count; i++) {
NSURL *url = [NSURL URLWithString:[array objectAtIndex:i]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFImageRequestOperation *op = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:^UIImage *(UIImage *image) {
return image;
} success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
// SUCCESS BLOCK (not relevant)
} …Run Code Online (Sandbox Code Playgroud) cocoa-touch objective-c nsoperation nsoperationqueue afnetworking
我找到了这个答案:https://stackoverflow.com/a/4861732/1486928
我正在尝试这样做,但它不会让我分配一个新创建NSFetchRequest的文档,它说:
@property(非原子,只读)NSFetchRequest*fetchRequest
但在下一行中它说:
特殊注意事项:如果要修改提取请求,则必须遵循"提取请求"中描述的步骤.
那是哪个,我是否可以修改它:/?这个属性非常令人困惑,readonly他们说我们可以修改它:(
因此,今天的演习是创建一个函数initialize an array of int,并fill it从0到n.
我写了这个:
void function(int **array, int max)
{
int i = 0;
*array = (int *) malloc((max + 1) * sizeof(int));
while (i++ < max)
{
*array[i - 1] = i - 1; // And get EXC_BAD_ACCESS here after i = 2
}
}
Run Code Online (Sandbox Code Playgroud)
经过几个小时的EXC_BAD_ACCESS疯狂后,我决定搜索SO,找到这个问题:在函数中初始化数组
然后将我的函数更改为:
void function(int **array, int max)
{
int *ptr; // Create pointer
int i = 0;
ptr = (int *) malloc((max + 1) …Run Code Online (Sandbox Code Playgroud) 我不得不重新实现printf(3)与Cwihtout使用,会做这种转换我的任何功能.
我想后,我明白我做感谢您对球员如何%a工作:如何在%printf语句转换工作?
然后我意识到我不明白这rounding是怎么做的所以我问:C printf浮动四舍五入然后认为我在你帮助我之后就完成了.
而现在这%a完全正常工作,就像我认为的%La那样完全一样,%a但long double由于该男子只说:
修饰语a,A,e,E,f,F,g,G
l(ell)double(忽略,与没有它相同的行为)
L long double
我发现它输出的东西完全不同:'(
double a_double = 0.0001;
long double a_long_double = 0.0001;
printf("%a\n", a_double); #=> 0x1.a36e2eb1c432dp-14
printf("%La\n", a_long_double); #=> 0xd.1b71758e21968p-17
Run Code Online (Sandbox Code Playgroud)
该%a结果总是开头1.,现在我完全不明白什么%La是做.
你能帮我了解的过程是转换0.0001到0xd.1b71758e21968p-17?
编辑:我真的不明白的部分是为什么 %a总是输出一些开头的东西1.而不是%La?
EDIT2:为了更精确:为什么不%a选择输出1. ...p-14和 …
c ×4
ios ×4
objective-c ×4
core-data ×3
uitableview ×3
hex ×2
iphone ×2
nsoperation ×2
pointers ×2
printf ×2
afnetworking ×1
autolayout ×1
cocoa-touch ×1
elixir ×1
inspect ×1
ipad ×1
malloc ×1
nsbutton ×1
nstableview ×1