小编neb*_*ebs的帖子

视图是否应包含模型引用?

假设我们有以下类:

视图

@interface ArticleView : UIView
@property IBOutlet UILabel *titleLabel;
@property IBOutlet UILabel *bodyLabel;
@end
Run Code Online (Sandbox Code Playgroud)

模型

@interface Article : NSObject
@property NSString *title;
@property NSString *body;
@end
Run Code Online (Sandbox Code Playgroud)

调节器

@interface ArticleViewController : UIViewController
@property Article *myArticle;
@property ArticleView *myArticleView;
- (void)displayArticle;
@end

@implementation
- (void)displayArticle {
    // OPTION 1
    myArticleView.titleLabel.text = myArticle.title;
    myArticleView.bodyLabel.text = myArticle.body;    

    // ... or ...

    // OPTION 2
    myArticleView.article = myArticle;
}
@end
Run Code Online (Sandbox Code Playgroud)

选项1

  • PRO:视图和模型都没有相互耦合.
  • CON:控制器需要知道模型和视图的细节.

方案2

  • PRO:控制器代码轻巧灵活(如果视图或模型更改,控制器代码保持不变.
  • CON:视图和模型是耦合的,因此不太可重复使用.

在选项2中,必须更改ArticleView以保存对模型的引用:

@interface ArticleView : …
Run Code Online (Sandbox Code Playgroud)

oop model-view-controller design-patterns objective-c ios

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

在不知道当前视图控制器的情况下呈现模态控制器?

有没有办法在不知道可见视图控制器视图是什么的情况下以模态方式呈现视图控制器?基本上有点像你会在任何时间点显示警报视图.

我希望能够做到这样的事情:

MyViewController *myVC = [[MyViewController alloc] init];
[myVC showModally];
Run Code Online (Sandbox Code Playgroud)

我希望能够从应用程序的任何位置调用此功能,并将其显示在顶部.我不想关心当前的视图控制器是什么.

我打算用它来显示登录提示.我不想使用警报视图,我也不希望在整个应用程序中都有登录演示代码.

有什么想法吗?或者有没有更好的方法来实现这一目标?我应该只实现自己的机制,只是在窗口顶部放置一个视图?

modal-dialog presentmodalviewcontroller ios

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

MongoDB:查询和检索嵌入式数组中的对象?

假设我在名为"users"的集合中有以下文档架构:

{
    name: 'John',
    items: [ {}, {}, {}, ... ]
}
Run Code Online (Sandbox Code Playgroud)

'items'数组包含以下格式的对象:

{
    item_id: "1234",
    name: "some item"
}
Run Code Online (Sandbox Code Playgroud)

每个用户可以在"项目"数组中嵌入多个项目.

现在,我希望能够通过item_id为给定用户获取项目.

例如,我想获取属于名为"John"的用户的ID为"1234"的项目.

我可以用mongoDB做到这一点吗?我想利用它强大的数组索引,但我不确定你是否可以在嵌入式数组上运行查询并从数组中返回对象而不是包含它的文档.

我知道我可以使用{users.items.item_id:"1234"}来获取拥有某个项目的用户.但我想从数组中获取实际项目,而不是用户.

或者,是否有更好的方法来组织这些数据,以便我可以轻松地得到我想要的东西?我仍然是mongodb的新手.

感谢您提供的任何帮助或建议.

arrays mongodb

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

jQuery:陷阱所有点击事件发生之前?

在我的页面上,我有很多响应点击事件的元素.有时我需要根据某些全局标志来阻止所有点击.有没有办法在集中的位置进行检查?

现在我在每个事件中检查标志,例如:

var canClick = false; // Global flag

// Sample click event:
$("#someDiv").click(function(){
  if(!canClick) return;

  // Some stuff ...
});
Run Code Online (Sandbox Code Playgroud)

我想做的是有一个元素任何其他元素之前捕获所有点击事件.

我尝试在文档上执行此操作但这些事件仅在其他单击事件之后发生.

例:

$("#someDiv").click(function(){ console.log("someDiv click"); });

$(document).click(function(){ console.log("Document click"); });

// When I click on the someDiv element it prints:
> someDiv click
> Document click
Run Code Online (Sandbox Code Playgroud)

我还尝试在所有内容之上放置一个全屏div并使用它来捕获事件,但问题是没有任何点击通过这个全屏div传播.此外,我不想依赖于创建额外的元素来捕获点击,因为它感觉有点hacky.

我可以覆盖jQuery点击功能,以便我可以把我的小支票放在那里吗?

有什么明显的东西我在这里不见了吗?

谢谢你的帮助.

jquery events click propagation

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

UILabel外观字体和属性字符串字体

在我的应用程序中,我将全局自定义字体应用于所有标签,如下所示:

UIFont *font = [UIFont fontWithName:kMyFontName size:15.0]; 
[[UILabel appearance] setFont:font];
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,在某些情况下,我希望能够为UILabel字符串的特定区域指定不同的字体.

所以我有这样的事情:

NSString *string = @"Foo Bar Baz";
UIFont *boldFont = [UIFont fontWithName:kMyBoldFontName size:15.0]; 
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string];
[attrString setAttributes:@{ NSFontAttributeName: boldFont } range:NSMakeRange(0, 3)];
self.myLabel.attributedText = attrString;
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不起作用.我希望"Foo"是粗体,但整个字符串只有默认字体.就好像粗体字体根本没有应用,并且被UILabel外观代理上的字体集覆盖.

当我删除UILabel外观线然后它工作正常(我可以看到粗体字符串的一部分).基本上我想将自定义字体应用于标签,但是应用于字符串的不同区域的单独字体.通常这适用于属性字符串但由于某种原因设置UILabel外观字体禁用此功能(或似乎如此).

  • 预期成果:" Foo Bar Baz"
  • 实际结果:"Foo Bar Baz"

如果我删除该[[UILabel appearance] setFont:]行,那么它的工作原理:

  • " Foo Bar Baz"

(但是字符串的其余部分没有设置自定义字体).

所以我的问题是:有没有办法指定一个字体用作默认的应用程序范围,但仍然可以使用属性字符串部分覆盖它?

此外,如果有人可以向我解释为什么这不起作用我会很感激.

objective-c nsattributedstring uilabel ios uiappearance

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

instancetype vs singleton的类名?

据我所知,instancetype向编译器声明该方法的返回类型与接收消息的类相同.

传统上我总是声明我的单例初始值设定项,并将类名显式设置为返回类型:

@interface MyClass : NSObject
+ (MyClass *)sharedInstance;
@end
Run Code Online (Sandbox Code Playgroud)

现在我想知道我是否应该使用instancetype,如下所示:

@interface MyClass : NSObject
+ (instancetype)sharedInstance;
@end   
Run Code Online (Sandbox Code Playgroud)

最后结果是一样的,我只是想知道是否有理由在这里使用其中一个?

singleton objective-c instancetype

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

MySQL:获得时差的平均值?

我有一个名为Sessions的表,有两个日期时间列:开始和结束.

对于每一天(YYYY-MM-DD),可以有许多不同的开始和结束时间(HH:ii:ss).我需要找到这些开始和结束时间之间所有差异的每日平均值.

几行的示例是:

start: 2010-04-10 12:30:00 end: 2010-04-10 12:30:50
start: 2010-04-10 13:20:00 end: 2010-04-10 13:21:00
start: 2010-04-10 14:10:00 end: 2010-04-10 14:15:00
start: 2010-04-10 15:45:00 end: 2010-04-10 15:45:05
start: 2010-05-10 09:12:00 end: 2010-05-10 09:13:12
...
Run Code Online (Sandbox Code Playgroud)

2010-04-10的时差(以秒为单位)为:

50
60
300
5
Run Code Online (Sandbox Code Playgroud)

2010-04-10的平均值为103.75秒.我希望我的查询返回类似于:

day: 2010-04-10 ave: 103.75
day: 2010-05-10 ave: 72
...
Run Code Online (Sandbox Code Playgroud)

我可以按开始日期分组时间差,但我不确定如何获得平均值.我尝试使用AVG函数,但我认为它只能直接用于列值(而不是另一个聚合函数的结果).

这就是我所拥有的:

SELECT
    TIME_TO_SEC(TIMEDIFF(end,start)) AS timediff
FROM
    Sessions
GROUP BY
    DATE(start)
Run Code Online (Sandbox Code Playgroud)

有没有办法获得每个开始日期组的timediff平均值?我是聚合函数的新手,所以也许我误解了一些东西.如果您知道备用解决方案,请分享.

我总是可以专门做它并在PHP中手动计算平均值,但我想知道是否有办法在MySQL中这样做,所以我可以避免运行一堆循环.

谢谢.

mysql datetime average

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

抽象解析对象?

我想在我的应用程序中使用Parse(parse.com).Parse使用PFObject模型.我想在我的代码中使用我自己的模型(因此它不依赖于解析).如果可能的话,我想设计我的应用程序,以便我可以尽可能无缝地用另一个云服务替换解析.

这是一个好主意吗?抽象模型存储的最佳方法是什么,以便我的应用程序中没有(或最小)Parse代码的痕迹?

也许使用适配器设计模式将解析对象映射到我自己的对象?这应该是一个独立的类还是模型逻辑的一部分?

如果有人尝试过这样的话,我想听听你的想法.我应该直接在我的代码中使用解析模型吗?或者也许是单件工厂根据解析对象生成我的模型?

任何提示/想法/评论?

parsing abstraction model ios

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

以编程方式更改(不是init)UIBarButtonItem标识符?

在IB中,我可以将UIBarButtonItem的标识符设置为"play",其中添加了播放按钮的图像(右指向三角形).

有没有办法以编程方式更改此图像?我想在按下播放按钮时将其更改为"暂停".

我知道你可以使用标识符初始化一个UIBarButtonItem,但我还没有找到一种方法来在初始化后更改它.这甚至可能吗?

我唯一能想到的就是删除旧按钮并在其位置初始化一个新按钮,但这似乎不太有效.

有什么想法吗?

iphone uibarbuttonitem

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

从php脚本返回时,你如何支持寻找mp3?

我的服务器上有一个mp3(网址只是示例):

http://www.my-server.com/myaudio.mp3
Run Code Online (Sandbox Code Playgroud)

我在服务器上有一个php脚本:

http://www.my-server.com/testmp3.php
Run Code Online (Sandbox Code Playgroud)

其中包含以下代码(我在这里得到):

<?
$file = "myaudio.mp3";

if (file_exists($file)) {
  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename='.basename($file));
  header('Content-Transfer-Encoding: binary');
  header('Expires: 0');
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Pragma: public');
  header('Content-Length: ' . filesize($file));
  ob_clean();
  flush();
  readfile($file);
  exit;
}
?> 
Run Code Online (Sandbox Code Playgroud)

这是我必须做的所有模仿行为,以便两个请求的行为方式相同,并返回完全相同的响应?或者有什么我想念的.

我在iOS上使用了一些流媒体代码(这里不相关),并且这两个请求都传输了音频,但是我无法正确使用php请求,但我可以直接使用mp3请求.

因此,在没有详细了解应用程序本身的情况下,我想首先消除这个变量.有什么我需要做的,以确保从另一个应用程序的角度来看这两个请求将返回完全相同的数据?

感谢您的任何意见,您可以在这里给我.

更新

事实证明,我的问题应该是"从php脚本返回时你如何支持寻找mp3?".

php http file request

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