小编Dar*_*ski的帖子

在UITableViewCell上点击执行条件segue

我正在使用Xcode 4.2为iOS 5开发一些项目.我有一个UITableViewController,并希望在用户点击表格单元格时执行segue,但目标视图控制器依赖于对该单元格执行的操作.例如,当用户点击单元格时我想加载SomeViewController,但是当用户在编辑模式下点击同一单元格时,我想加载AnotherViewController.不幸的是,没有办法在Xcode 4.2 storyboard builder中的同一个单元格上配置多个segue,或者我只是没有得到它.也许有一种方法可以在代码编辑器中手动创建segue.通常我想要实现的是为用户提供一种方法,使用一个视图控制器"输入"由单元格表示的项目,并使用另一个视图控制器"编辑"由同一单元格表示的项目.在表编辑模式下切换到第二个视图控制器(编辑器)只是我的第一个,但也许有更好的方法.任何帮助将不胜感激.

storyboard uitableview ios xcode4.2

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

SpriteKit的SKPhysicsBody带有多边形辅助工具

我想知道是否有一个工具可以用来在SpriteKit中轻松生成复杂的物理实体.我想有一个基于体积的物理实体与多边形类型的形状.SpriteKit允许使用该方法创建此类主体:

+ (SKPhysicsBody *)bodyWithPolygonFromPath:(CGPathRef)path
Run Code Online (Sandbox Code Playgroud)

不幸的是,手动生成这样的路径是耗时的任务,并且在测试时可能会有问题.SpriteHelper应用程序允许您在易于使用的可视化编辑器中定义体形,但此应用程序无法导出可在此处使用的路径.它是为cocos2d制作的,它做了很多像纹理包装等我不需要的东西,我也不能用SpriteKit.有没有人知道一个解决方案,可以很容易地定义CGPath,甚至可以通过alpha通道从png图像自动生成它们?虽然我的经验中的自动生成功能需要优化,因为当纹理可能具有更复杂的形状时,身体形状应该尽可能简单.

sprite game-physics cgpath sprite-kit

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

UINavigationBar在滚动时改变透明度

我正在尝试实现UINavigationBar在滚动时更改其透明度UITableView.开始时,导航栏应该具有透明背景,因此其下方的内容应该是可见的(将显示图像,例如我使用纯色):

例1

当用户滚动表格视图时,透明度应替换为纯色:

例2

表视图将包含节标题,这些标题应该像使用非半透明导航栏时一样.一旦从底部"触摸"它,标题视图应"粘贴"到导航栏:

例3

我试图在iOS应用程序中实现此流程没有运气.

对于初始状态,我将UINavigationBar translucent属性设置为YES,以及两者backgroundColorbarTintColor清除颜色,这给了我想要的东西.

然后,当用户滚动表视图时,我正在更新backgroundColorbarTintColor使用给定alpha分量的颜色,基于当前滚动偏移计算.我使用scrollViewDidScroll:UIScrollViewDelegate协议来这样做.但是,它仅更改导航栏的背景,使状态栏背景保持透明,这不是我想要的.

UINavigationBar没有设置translucent属性我找不到透明的另一种方法YES.不幸的是,这会改变滚动时节标题的行为方式.由于导航栏是半透明的,当它们应该像上面的第三个屏幕截图那样"粘住"到条形时,部分标题视图隐藏在它下方.

我将不胜感激任何帮助和提示如何实现在Objective-C或Swift中描述或类似的导航栏.

uinavigationbar uitableview ios

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

Symfony2 Doctrine2与两个Owning Sides和Doctrine cmd行工具的多对多关系

在我的Symdony2项目中,我有两个相关的实体:Service和ServiceGroup.这应该是多对多关系,因为每个组可以有许多服务,并且每个服务可以属于许多组.而且,我需要一个用户界面来管理服务和组.因此,在编辑服务时,用户应该能够选择它所属的组.类似地,在编辑ServiceGroup时,用户应该能够选择属于该组的服务.我已经通过在我的学说中建立多对多关系来实现这一目标.一切都像魅力一样,包括在Symfony2中构建自定义表单类型的用户界面(我使用"实体"表单字段类型,以允许用户在ServiceGroup编辑器和服务编辑器中的组中选择服务).我唯一的问题是我不能再使用Doctrine命令行来更新数据库模式.

这是我的服务实体源代码的一部分:

class Service
{
    /**
     * @var ArrayCollection $groups
     * @ORM\ManyToMany(targetEntity="ServiceGroup")
     * @ORM\JoinTable(
     *      name="service_servicegroup",
     *      joinColumns={@ORM\JoinColumn(name="service_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="servicegroup_id", referencedColumnName="id")}
     * )
     */
    private $groups;
}
Run Code Online (Sandbox Code Playgroud)

这是我的ServiceGroup实体源代码的一部分:

class ServiceGroup
{
    /**
     * @var ArrayCollection $services
     * @ORM\ManyToMany(targetEntity="Service")
     * @ORM\JoinTable(
     *      name="service_servicegroup",
     *      joinColumns={@ORM\JoinColumn(name="servicegroup_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="service_id", referencedColumnName="id")}
     * )
     */
    private $services;
}
Run Code Online (Sandbox Code Playgroud)

我在两种情况下都使用JoinTable,因为这是我在用户界面编辑器中保存关系时找到工作的唯一方法,如下所示:

服务编辑:

服务编辑

名称:[服务1]

此服务所属的组:

[x] A组

[] B组

[] C组

[ 保存 ]

和ServiceGroup编辑器:

小组编辑

姓名:[A组]

服务属于这个群组:

[x]服务1

[]服务2

[]服务3

[ 保存 ]

使用这种多对多配置,我可以毫无问题地使用这些编辑器(表单),当使用没有JoinTable注释的多对多,我只能完全使用一个表单,第二个是不保存"此服务所属的组"或"服务属于此组"选项中的更改(取决于我在多对多注释语句中设置mappedBy和inversedBy参数的方向). …

many-to-many symfony doctrine-orm

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

MySQL选择连接在何处AND

我的数据库中有两个表:

制品

  • id(int,主键)
  • 名称(varchar)

ProductTags

  • product_id(int)
  • tag_id(int)

我想选择具有所有给定标签的产品.我试过了:

SELECT
    *
FROM
    Products
JOIN ProductTags ON Products.id = ProductTags.product_id
WHERE
    ProductTags.tag_id IN (1, 2, 3)
GROUP BY
    Products.id
Run Code Online (Sandbox Code Playgroud)

但它给了我带有任何给定标签的产品,而不是所有给定的标签.写作WHERE tag_id = 1 AND tag_id = 2毫无意义,因为不会返回任何行.

mysql join where-in relational-division

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

如何强制Doctrine更新数组类型字段?

我有一个带有数组类型字段的Doctrine实体:

/**
 * @ORM\Table()
 */
class MyEntity
{
    (...)

    /**
     * @var array $items
     * 
     * @ORM\Column( type="array" ) 
     */
    private $items;

    /**
     * @param SomeItem $item 
     */
    public function addItem(SomeItem $item)
    {
        $this->items[] = $item;
    }

    (...)
}
Run Code Online (Sandbox Code Playgroud)

如果我向数组添加元素,此代码正常工作:

$myEntityObject->addItems(new SomeItem()); 
$EntityManager->persist($myEntityObject);
$EntityManager->flush();
Run Code Online (Sandbox Code Playgroud)

$myEntityObject 使用正确的数据保存到数据库(数组已序列化,并在查询数据库时反序列化).

不幸的是,当我在不改变该数组大小的情况下更改数组中的一个对象时,如果我试图将更改保存到数据库,则Doctrine不会执行任何操作.

$items = $myEntityObject->getItems();
$items[0]->setSomething(123);
$myEntityObject->setItems($items);
$EntityManager->persist($myEntityObject);
$EntityManager->flush();
print_r($myEntityObject);
Run Code Online (Sandbox Code Playgroud)

虽然,print_r在该代码的最后一行显示更改的对象的数据,但是如果数组大小没有更改,则Doctrine不知道数组内的某些内容已更改.有没有办法强制Doctrine保存在该字段中所做的更改(或者轻轻地告知它该字段中需要保存的更改)?


只是在文档中找到了解决我的问题的方法:

http://docs.doctrine-project.org/en/latest/reference/change-tracking-policies.html

它需要对代码进行大量更改,但它可以正常工作.有人知道如何保留其他字段的默认跟踪策略,并仅将NotifyPropertyChanged用于存储数组的字段吗?

php arrays doctrine symfony doctrine-orm

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

如果帧样式为NSImageFrameNone,则NSImageView不会缩小图像

我需要NSImageView在resizable 上显示NSWindow.如果视图中显示的图像太大而无法适应widnow中的图像视图,则视图中应显示的图像应缩小,并且在调整窗口大小时也应更改其大小.我能够使用自动布局实现正确的行为,并将imageScaling属性设置NSImageViewNSImageScaleProportionallyDown.不幸的是,当我的图像视图的imageFrameStyle属性被设置为时,它不起作用NSImageFrameNone(它适用于任何其他选项,如NSImageFramePhotoNSImageFrameGrayBezel).我不希望显示任何帧,例如NSImageFrameNone,但禁用帧中断自动调整 - 看起来像帧设置为NSImageFrameNone图像不缩小并按NSImageView比例放大以匹配显示的图像大小.有人解决这个问题吗?

cocoa objective-c nsimageview

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

SKPhysicsBody bodyWithPolygonFromPath内存泄漏

在创建具有自定义形状的Sprite Kit物理主体时,我有一个奇怪的内存泄漏.这就是我的实现的样子:

CGFloat offsetX = self.frame.size.width * self.anchorPoint.x;
CGFloat offsetY = self.frame.size.height * self.anchorPoint.y;

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 4 - offsetX, 3 - offsetY);
CGPathAddLineToPoint(path, NULL, 66 - offsetX, 3 - offsetY);
CGPathAddLineToPoint(path, NULL, 35 - offsetX, 57 - offsetY);
CGPathCloseSubpath(path);

self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];

CGPathRelease(path);
Run Code Online (Sandbox Code Playgroud)

内部SKSpriteNode方法一切都在进行中.在创建这样的实体后,Instruments会告诉我几个内存泄漏:

Leaked object: 
  Malloc 32 Bytes
Size:
  32 Bytes
Responsible Library: 
  PhysicsKit
Responsible Frame:
  std::__1::__split_buffer<PKPoint, std::__1::allocator<PKPoint>&>::__split_buffer(unsigned long, unsigned long, std::__1::allocator<PKPoint>&)
Run Code Online (Sandbox Code Playgroud)

CGPathRelease(path);条线是必要的 - 没有它我会得到更多的内存泄漏,CGPath这是可以理解的.当我使用此实现时(用于测试目的):

CGFloat radius = …
Run Code Online (Sandbox Code Playgroud)

memory-leaks objective-c game-physics sprite-kit skphysicsbody

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

如何在Swift中对NSFetchedResultsController进行单元测试

我有一个Swift应用程序,用于从持久存储中NSFetchedResultsController获取List对象:

let fetchedResultsController: NSFetchedResultsController = ...
var error : NSError?
fetchedResultsController.performFetch(&error)
if let error = error {
    NSLog("Error: \(error)")
}
let lists: [List] = fetchedResultsController.fetchedObjects! as [List]
NSLog("lists count = \(lists.count)")
for list: List in lists {
    NSLog("List: \(list.description)")
}
Run Code Online (Sandbox Code Playgroud)

它的工作方式与预期的一样,我将List对象描述打印到控制台.我想为我的应用程序编写一些单元测试,所以我创建了扩展的类XCTestCase.代码编译没有问题,测试运行,但不幸的是我无法List在该上下文中获取对象.

我在控制台中得到的只是List对象的数量和致命的错误:

lists count = 59
fatal error: NSArray element failed to match the Swift Array Element type
Run Code Online (Sandbox Code Playgroud)

线路上升:

for list: List in lists {
Run Code Online (Sandbox Code Playgroud)

我很确定我已经正确配置了目标,因为我可以创建List对象并将其插入到托管对象上下文中,而不会出现我的应用程序源代码以及单元测试源代码的问题.我遇到的唯一问题是从测试单元获取.我想知道为什么在模拟器中运行应用程序时提取工作正常,并且在单元测试期间执行时失败. …

unit-testing nsfetchedresultscontroller xctest swift

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

带有SQL函数的Doctrine DQL查询

我正在将用CodeIgniter编写的简单Web应用程序移植到Symfony2包中.我是Symfony2和Doctrine的新手,我遇到一个SQL查询问题,我想在DQL中重写.我已准备好进入我的捆绑包,我已经创建了Entity类,我能够将数据插入到数据库中,并以Symfony2提供的面向对象编程方式进行简单查询.不幸的是,我不知道如何在DQL中实现这个SQL查询:

$sql = "SELECT * FROM t WHERE 
UNIX_TIMESTAMP(t.date) > ".(time()-300)." AND
ROUND(t.x,3) = ".round($x, 3);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,有一些SQL函数调用需要在数据库服务器上执行.主义无法理解这种呼唤.当然,我可以选择退出使用Doctrine并使用我的Symfony2包中的基本PDO进行此查询,但我想充分利用Symfony2和Doctrine.因此,我希望以OOP方式完成此操作,或者使用能够理解类似内容的智能DQL查询:

$em->createQuery("SELECT t FROM MyTestBundle:MyEntity t WHERE t.x = :x")
->setParameter("x", round($x,3));
Run Code Online (Sandbox Code Playgroud)

但是能够将我的SQL查询从旧应用程序重写到我的新包是必须的.请帮我找到正确的解决方案.

php sql dql symfony doctrine-orm

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