我正在使用Xcode 4.2为iOS 5开发一些项目.我有一个UITableViewController,并希望在用户点击表格单元格时执行segue,但目标视图控制器依赖于对该单元格执行的操作.例如,当用户点击单元格时我想加载SomeViewController,但是当用户在编辑模式下点击同一单元格时,我想加载AnotherViewController.不幸的是,没有办法在Xcode 4.2 storyboard builder中的同一个单元格上配置多个segue,或者我只是没有得到它.也许有一种方法可以在代码编辑器中手动创建segue.通常我想要实现的是为用户提供一种方法,使用一个视图控制器"输入"由单元格表示的项目,并使用另一个视图控制器"编辑"由同一单元格表示的项目.在表编辑模式下切换到第二个视图控制器(编辑器)只是我的第一个,但也许有更好的方法.任何帮助将不胜感激.
我想知道是否有一个工具可以用来在SpriteKit中轻松生成复杂的物理实体.我想有一个基于体积的物理实体与多边形类型的形状.SpriteKit允许使用该方法创建此类主体:
+ (SKPhysicsBody *)bodyWithPolygonFromPath:(CGPathRef)path
Run Code Online (Sandbox Code Playgroud)
不幸的是,手动生成这样的路径是耗时的任务,并且在测试时可能会有问题.SpriteHelper应用程序允许您在易于使用的可视化编辑器中定义体形,但此应用程序无法导出可在此处使用的路径.它是为cocos2d制作的,它做了很多像纹理包装等我不需要的东西,我也不能用SpriteKit.有没有人知道一个解决方案,可以很容易地定义CGPath,甚至可以通过alpha通道从png图像自动生成它们?虽然我的经验中的自动生成功能需要优化,因为当纹理可能具有更复杂的形状时,身体形状应该尽可能简单.
我正在尝试实现UINavigationBar
在滚动时更改其透明度UITableView
.开始时,导航栏应该具有透明背景,因此其下方的内容应该是可见的(将显示图像,例如我使用纯色):
当用户滚动表格视图时,透明度应替换为纯色:
表视图将包含节标题,这些标题应该像使用非半透明导航栏时一样.一旦从底部"触摸"它,标题视图应"粘贴"到导航栏:
我试图在iOS应用程序中实现此流程没有运气.
对于初始状态,我将UINavigationBar
translucent
属性设置为YES
,以及两者backgroundColor
并barTintColor
清除颜色,这给了我想要的东西.
然后,当用户滚动表视图时,我正在更新backgroundColor
和barTintColor
使用给定alpha分量的颜色,基于当前滚动偏移计算.我使用scrollViewDidScroll:
的UIScrollViewDelegate
协议来这样做.但是,它仅更改导航栏的背景,使状态栏背景保持透明,这不是我想要的.
UINavigationBar
没有设置translucent
属性我找不到透明的另一种方法YES
.不幸的是,这会改变滚动时节标题的行为方式.由于导航栏是半透明的,当它们应该像上面的第三个屏幕截图那样"粘住"到条形时,部分标题视图隐藏在它下方.
我将不胜感激任何帮助和提示如何实现在Objective-C或Swift中描述或类似的导航栏.
在我的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参数的方向). …
我的数据库中有两个表:
制品
ProductTags
我想选择具有所有给定标签的产品.我试过了:
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
毫无意义,因为不会返回任何行.
我有一个带有数组类型字段的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用于存储数组的字段吗?
我需要NSImageView
在resizable 上显示NSWindow
.如果视图中显示的图像太大而无法适应widnow中的图像视图,则视图中应显示的图像应缩小,并且在调整窗口大小时也应更改其大小.我能够使用自动布局实现正确的行为,并将imageScaling
属性设置NSImageView
为NSImageScaleProportionallyDown
.不幸的是,当我的图像视图的imageFrameStyle
属性被设置为时,它不起作用NSImageFrameNone
(它适用于任何其他选项,如NSImageFramePhoto
或NSImageFrameGrayBezel
).我不希望显示任何帧,例如NSImageFrameNone
,但禁用帧中断自动调整 - 看起来像帧设置为NSImageFrameNone
图像不缩小并按NSImageView
比例放大以匹配显示的图像大小.有人解决这个问题吗?
在创建具有自定义形状的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
我有一个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
对象并将其插入到托管对象上下文中,而不会出现我的应用程序源代码以及单元测试源代码的问题.我遇到的唯一问题是从测试单元获取.我想知道为什么在模拟器中运行应用程序时提取工作正常,并且在单元测试期间执行时失败. …
我正在将用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查询从旧应用程序重写到我的新包是必须的.请帮我找到正确的解决方案.
doctrine-orm ×3
symfony ×3
game-physics ×2
ios ×2
objective-c ×2
php ×2
sprite-kit ×2
uitableview ×2
arrays ×1
cgpath ×1
cocoa ×1
doctrine ×1
dql ×1
join ×1
many-to-many ×1
memory-leaks ×1
mysql ×1
nsimageview ×1
sprite ×1
sql ×1
storyboard ×1
swift ×1
unit-testing ×1
where-in ×1
xcode4.2 ×1
xctest ×1